views:

38440

answers:

5

I'm a bit new to working with c/c++, so sorry if this is a dumb question. I've been working on the Cell processor and I'm trying to create a struct that will hold an spe_context_ptr_t, which will be used within the thread to launch an spe context and will also hold a pointer to something else that will be passed to the spu context from within the thread (currently I'm trying to just make it a generic pointer, but in actuality it will be a pointer to another structure I've defined). When I try and compile, I get the following error:

spu/../common.h:38: error: expected specifier-qualifier-list before 'spe_context_ptr_t'

// here is the offending line(s)

typedef struct _PTHREAD_BLOCK {
    spe_context_ptr_t * context; // Error happens here
    uintptr32_t  args; 
 } PTHREAD_BLOCK;
+22  A: 

The compiler doesn't know that spe_context_ptr_t is a type. Check that the appropriate typedef is in scope when this code is compiled. You may have forgotten to include the appropriate header file.

Trent
In my case (for an iPhone project), the problem was that I was including the headers in such a way that I suspect it was causing a circular dependency. I resolved it by declaring the class ahead of time in my .h file with the @class parameter. Once I did this, the circular dependency was resolved and this error went away.Just a note if anyone is seeing this in XCode/Obj-C.
Eric Farraro
+3  A: 

I had the same error message but the solution is different.

The compiler parses the file from top to bottom.

Make sure a struct is defined BEFORE using it into another:

typedef struct
{
    char    name[50];
    wheel_t    wheels[4]; //wrong, wheel_t is not defined yet
} car_t;

typedef struct
{
    int    weight;
} wheel_t;
superFoieGras
A: 

You have to name your struct like that:

typedef struct car_t {

char

wheel_t

} car_t;

Typen
A: 

For iPhone cocoa-touch projects:

I had this problem and thanks to Eric Farraro's comment, I was able to get it resolved. I was importing a class WSHelper.h in many of my other classes. But I also was importing some of those same classes in my WSHelper.h (circular like Eric said). So, to fix this I moved the imports from my WSHelper.h file to my WSHelper.m file as they weren't really needed in the .h file anyway.

Gorgando
+1  A: 

I got it with an import loop:

---FILE B.h
#import "A.h"
@interface B{
  A *a;
}
@end

---FILE A.h
#import "B.h"
@interface A{      
}
@end
dkk