J'ai un fichier catalog.h avec ceerreur: déclaration prévue spécificateurs ou '...' avant 'list_node'
typedef struct node* list_node;
struct node
{
operationdesc op_ptr;
list_node next;
};
et un parser.h avec ce
#include "catalog.h"
int parse_query(char *input, list_node operation_list);
deux têtes ont #ifndef
, #define
, #endif
. Le compilateur me donne cette erreur: expected declaration specifiers or ‘...’ before ‘list_node’
sur la ligne parse_query. Quel est le problème? J'ai essayé de mettre le typedef dans parser.h, et ça va. Pourquoi ai-je cette erreur quand le typedef est dans catalog.h?
En fait, j'avais un #include "parser.h" dans le catalogue.h. Je l'ai enlevé, et maintenant il compile normalement ... Je suppose qu'il a essayé de charger la définition de parse_query avant la définition de typedef et de struct ..? – pvinis
Qu'est-ce que le #ifndef dans catalog.h ressemble exactement? Essayez cc -E pour voir la sortie du préprocesseur pour voir si list_node est réellement défini au point de la ligne parse_query. –
Vous semblez avoir deux fichiers qui se «# comprennent» l'un l'autre. Cela ne peut pas fonctionner à cause des gardes inclus. Regardez le fichier après le prétraitement et voyez. Même si vous contournez le problème, les dépendances circulaires sont généralement mauvaises et doivent être éliminées. Essayez de réorganiser vos déclarations afin qu'il n'y ait pas de '# include' récursif. –