#ifndef
Résolu
Caliphe
Messages postés
32
Statut
Membre
-
Caliphe Messages postés 32 Statut Membre -
Caliphe Messages postés 32 Statut Membre -
Bonjour,
cela fait un moment que je cherche mais je ne trouve pas la solution. Voilà mon problème :
-J'ai un fichier Jeu.h et Coup.h
Dans le fichier Jeu.h:
Dans le fichier Coup.h
En compilant le main qui fait appelle à Jeu.h j'ai l'erreur :
Si quelqu'un peut m'aider :D
Merci
cela fait un moment que je cherche mais je ne trouve pas la solution. Voilà mon problème :
-J'ai un fichier Jeu.h et Coup.h
Dans le fichier Jeu.h:
#ifndef INCLUDE_JEU
#define INCLUDE_JEU
#include "Coup.h"
typedef struct Jeu{
Attribut 1;
Attribut 2;
}Jeu;
void jouerCoup(Jeu *, Coup *);
#endif
Dans le fichier Coup.h
#ifndef INCLUDE_LISTE
#define INCLUDE_LISTE
#include "Jeu.h"
typedef struct Coup{
Attribut 1;
Attribut 2;
}Coup;
Coup* choixCoup(Jeu *j);
#endif
En compilant le main qui fait appelle à Jeu.h j'ai l'erreur :
Coup.h:9:17: error: unknown type name 'Jeu'
Coup* choixCoup(Jeu *j);
Si quelqu'un peut m'aider :D
Merci
1 réponse
Salut Caliphe;
Dans cette situation tu pourrais faire une "forward declaration", c'est à dire utiliser un type incomplet de struct dans l'include avant le premier usage de la structure non déclarée, ce qui est possible dans ton cas vu que tu n'utilises la
Comme cela (cf. ligne 10 et ligne 12) :
Vois ce document http://www.umich.edu/~eecs381/handouts/CHeaderFileGuidelines.pdf d'un professeur de l'Université du Michigan que je trouve très clair exposant des règles communément admises de bonne gestion du contenu des fichiers .h et notamment le point 8.
Cela dit, si fonctionnellement il n'y a pas de raison de séparer ton code en deux fichiers .h, tu devrais peut-être réfléchir à regrouper les déclarations qui sont toujours utilisées ensemble dans un même .h avec un unique fichier .c correspondant, pour faire un seul module (cf. point 1).
Dal
Dans cette situation tu pourrais faire une "forward declaration", c'est à dire utiliser un type incomplet de struct dans l'include avant le premier usage de la structure non déclarée, ce qui est possible dans ton cas vu que tu n'utilises la
struct Jeuque sous la forme d'un pointeur.
Comme cela (cf. ligne 10 et ligne 12) :
#ifndef INCLUDE_LISTE
#define INCLUDE_LISTE
#include "Jeu.h"
typedef struct Coup{
int a;
int b;
}Coup;
struct Jeu;
Coup* choixCoup(struct Jeu *j);
#endif
Vois ce document http://www.umich.edu/~eecs381/handouts/CHeaderFileGuidelines.pdf d'un professeur de l'Université du Michigan que je trouve très clair exposant des règles communément admises de bonne gestion du contenu des fichiers .h et notamment le point 8.
Cela dit, si fonctionnellement il n'y a pas de raison de séparer ton code en deux fichiers .h, tu devrais peut-être réfléchir à regrouper les déclarations qui sont toujours utilisées ensemble dans un même .h avec un unique fichier .c correspondant, pour faire un seul module (cf. point 1).
Dal
merci beaucoup d'avoir pris le temps de répondre, je ne sais pas pourquoi je n'y avais pas pensé avant, je vais prendre le temps d'étudier le lien que tu m'as proposé.
Pour ce qui est du regroupement dans un même fichier, il y a plus de fonctions dans chaque fichier, je les ai juste simplifié pour une meilleure lisibilité.
Encore merci ;)