#ifndef

Résolu/Fermé
Caliphe Messages postés 31 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 24 février 2016 - 2 déc. 2015 à 23:05
Caliphe Messages postés 31 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 24 février 2016 - 3 déc. 2015 à 18:08
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:

#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

[Dal] Messages postés 6198 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 13 décembre 2024 1 096
Modifié par [Dal] le 3/12/2015 à 10:53
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
struct Jeu
que 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
0
Caliphe Messages postés 31 Date d'inscription dimanche 3 mai 2015 Statut Membre Dernière intervention 24 février 2016
3 déc. 2015 à 18:08
Salut 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 ;)
0