2009-03-03 14 views
50

He estado trabajando en el procesador Cell y estoy tratando de crear una estructura que contendrá un spe_context_ptr_t, que se usará dentro del hilo para lanzar un contexto spe y también mantendrá un puntero a otra cosa que será Pasó al contexto spu desde dentro del hilo (actualmente estoy tratando de convertirlo en un puntero genérico, pero en realidad será un puntero a otra estructura que he definido). Cuando intento compilar, obtengo el siguiente error:¿Qué significa este error: "error: specifier-calificador-list esperado antes de 'type_name'"?

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; 

Respuesta

61

El compilador no sabe que es un tipo spe_context_ptr_t. Verifique que el typedef apropiado esté dentro del alcance cuando se compila este código. Puede haber olvidado incluir el archivo de encabezado apropiado.

+51

En mi caso (para un proyecto de iPhone), el problema era que estaba incluyendo los encabezados de tal manera que sospecho que estaba causando una dependencia circular. Lo resolví declarando la clase antes de tiempo en mi archivo .h con el parámetro @class. Una vez que hice esto, la dependencia circular se resolvió y este error desapareció. Solo una nota si alguien está viendo esto en XCode/Obj-C. –

+0

gracias, lo vi después de la respuesta. ¿Pero puedes explicar por qué esto es trabajo y cómo? – ymutlu

4

Tuve el mismo mensaje de error pero la solución es diferente.

El compilador analiza el archivo de arriba hacia abajo.

asegurarse de que una estructura se define antes de usarlo en otra:

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

typedef struct 
{ 
    int weight; 
} wheel_t; 
+0

Use el ejemplo para mostrar la solución en su lugar (o también) –

0

Hay que nombrar a su estructura como esa:

typedef struct car_t { 

    char 

    wheel_t 

} car_t; 
2

Para proyectos de cacao de iPhone:

Tuve este problema y, gracias al comentario de Eric Farraro, pude resolverlo. Estaba importando una clase WSHelper.h en muchas de mis otras clases. Pero también estaba importando algunas de esas mismas clases en mi WSHelper.h (circular como Eric dijo). Entonces, para arreglar esto, moví las importaciones de mi archivo WSHelper.h a mi archivo WSHelper.m, ya que en realidad no se necesitaban en el archivo .h.

0

lo tengo con un bucle de importación:

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

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

yo era capaz de resolver esto utilizando solución de Gorgando, pero en vez de mover las importaciones de distancia, comenté cada uno de forma individual, construí la aplicación, a continuación, editado en consecuencia hasta que me deshice de ellos.

0

@simpleBob código

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

---FILE A.h 

@class B; 

@interface A{  
} 
@end 

arriba me ayudó a solucionar el problema. ¿Podría alguien explicar lo que está pasando aquí?

-1

este error básicamente se produce cuando utiliza el objeto antes de usarlo.

Cuestiones relacionadas