C, “conflicting types for... ” erreur
Avant que je continue, voici le code qui me donne une erreur:
#define numScores 3 //the number of test scores which a student will have
struct btreenode{
int studentID; //the ID number of the student at the current node
float scores[3]; //the 3 test scores of the student
float average; //the average of the 3 test scores for the student
struct btreenode *left; //pointer to left side of the tree
struct btreenode *right; //pointer to right side of the tree
};
typedef struct btreenode *Node;
J'obtiens l'erreur suivante quand je compile:
btreenode.h:17: error: redefinition of 'struct btreenode'
btreenode.h:28: error: conflicting types for 'Node'
btreenode.h:28: note: previous declaration of 'Node' was here
J'ai un bloc de commentaire en haut de sorte que les numéros de ligne sont éteints, mais
la ligne 17 est la première ligne "struct btreenode{
"
la ligne 28 est la dernière ligne "typedef struct btreenode *Node
"
Personne ne sait pourquoi j'obtiens ces erreurs?
Tu veux dire
Pas d'erreur pour moi. Voir la démo en ligne de compilation réussie.
compilé avec succès pour moi aussi.
peut-être cette erreur se produit si vous avez déclaré la même structure dans le fichier source
On dirait que vous êtes, y compris le fichier avec ces définitions plus d'une fois. Utiliser l'en-tête des gardes.
struct btreenode *Node;
?Pas d'erreur pour moi. Voir la démo en ligne de compilation réussie.
compilé avec succès pour moi aussi.
peut-être cette erreur se produit si vous avez déclaré la même structure dans le fichier source
.c
fichier ou d'en-tête inclus deux fois dans la source.pouvez-vous afficher la source et le fichier d'en-tête.On dirait que vous êtes, y compris le fichier avec ces définitions plus d'une fois. Utiliser l'en-tête des gardes.
OriginalL'auteur jlzizmor | 2014-02-12
Vous devez vous connecter pour publier un commentaire.
Le fichier d'en-tête ne doivent pas être inclus plus d'une fois. Donc, l'utilisation de la macro dans le fichier d'en-tête pour éviter de multiples inclusion.
Je suis supposé que, ce genre d'approche n'est pas là dans votre fichier d'en-tête.
OriginalL'auteur mahendiran.b
Il semble que votre btreenode.h est un fichier inclus (directement ou indirectement) à plusieurs reprises... c'est pourquoi la "déclaration précédente" et le "conflit de types" sont dans le même fichier au même ligne (déclaration précédente sur la première inclure, conflicting types lorsqu'il s'exécute sur la même ligne sur la prochaine inclure).
Vous devez utiliser l'en-tête des gardes (en btreenode.h) pour empêcher l'en-tête de fichier de code en cours de traitement s'il a déjà été inclus. En haut du fichier, ajoutez:
et à la fin du fichier, ajoutez:
De cette façon, tout ce qui est entre ceux qui ne seront compilés si BTREENODE_H n'était pas déjà
#define
d à partir d'une précédente inclusion.OriginalL'auteur Dmitri