web-dev-qa-db-fra.com

Que signifie cette erreur: "erreur: liste spécifiante-qualifiante-attendue avant 'nom_type'"?

J'ai travaillé sur le processeur Cell et j'essaie de créer une structure qui contiendra un spe_context_ptr_t, qui sera utilisé dans le fil pour lancer un contexte spe et tiendra également un pointeur sur quelque chose qui sera passé au contexte spu à partir du fil (actuellement, j'essaie d'en faire un pointeur générique, mais en réalité ce sera un pointeur sur une autre structure que j'ai définie). Lorsque j'essaie de compiler, j'obtiens l'erreur suivante:

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;
50
Paul Wicks

Le compilateur ne sait pas que spe_context_ptr_t est un type. Vérifiez que le typedef approprié est dans la portée lorsque ce code est compilé. Vous avez peut-être oublié d'inclure le fichier d'en-tête approprié.

61
Trent

J'ai eu le même message d'erreur mais la solution est différente.

Le compilateur analyse le fichier de haut en bas.

Assurez-vous qu'une structure est définie AVANT de l'utiliser dans une autre:

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

typedef struct
{
    int weight;
} wheel_t;
4
Icegras

Pour les projets iPhone cacao-touch:

J'ai eu ce problème et grâce au commentaire d'Eric Farraro, j'ai pu le résoudre. J'importais une classe WSHelper.h dans beaucoup de mes autres classes. Mais j'importais aussi certaines de ces classes dans mon WSHelper.h (circulaire, comme le disait Eric). Donc, pour résoudre ce problème, j'ai déplacé les importations de mon fichier WSHelper.h vers mon fichier WSHelper.m car elles n'étaient de toute façon pas vraiment nécessaires dans le fichier .h.

2
Brad

J'ai pu résoudre ce problème en utilisant le correctif de Gorgando, mais au lieu de déplacer les importations, je les ai commentées individuellement, j'ai construit l'application, puis modifié en conséquence jusqu'à ce que je m'en débarrasse.

0
Ryan

Je l'ai eu avec une boucle d'importation:

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

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

Vous devez nommer votre structure comme ça:

typedef struct car_t {

   char

   wheel_t

} car_t;
0
Typen

@simpleBob

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

---FILE A.h

@class B;

@interface A{      
}
@end

le code ci-dessus m'a aidé à résoudre ce problème. Quelqu'un pourrait-il expliquer ce qui se passe ici?

0
ymutlu