What does this error mean: "error: expected specifier-qualifier-list before 'type_name'"?

C++CPointersStruct

C++ Problem Overview


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;

C++ Solutions


Solution 1 - C++

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.

Solution 2 - C++

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;

Solution 3 - C++

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.

Solution 4 - C++

You have to name your struct like that:

typedef struct car_t {

   char

   wheel_t

} car_t;

Solution 5 - C++

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

Solution 6 - C++

I was able to sort this out using Gorgando's fix, but instead of moving imports away, I commented each out individually, built the app, then edited accordingly until I got rid of them.

Solution 7 - C++

this error basically comes when you use the object before using it.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPaul WicksView Question on Stackoverflow
Solution 1 - C++TrentView Answer on Stackoverflow
Solution 2 - C++IcegrasView Answer on Stackoverflow
Solution 3 - C++BradView Answer on Stackoverflow
Solution 4 - C++TypenView Answer on Stackoverflow
Solution 5 - C++DanielView Answer on Stackoverflow
Solution 6 - C++RyanView Answer on Stackoverflow
Solution 7 - C++newbieView Answer on Stackoverflow