IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème d'inclusions imbriquées


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut Problème d'inclusions imbriquées
    Bonsoir,

    j'ai deux headers (pour simplifier...) définis comme ça (je n'ai mis que les parties intéressantes):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    #ifndef	_LAYOUT_H
    #define	_LAYOUT_H
     
    #include "point.h"
    #include "plane.h"
    #include "scene.h"
     
     
    typedef struct
    {
    	Plane		plane;
    	Plane		scrollable;
    	Point		refresh;
    	void		*memory;
    } Layout;
     
     
    void		Layout_DrawScene(Layout *this, Scene *scene, Point *position);
     
     
    #endif	/* _LAYOUT_H */

    et le deuxième, qui inclut le premier:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #ifndef	_SCENE_H
    #define	_SCENE_H
     
    #include "layout.h"
    #include "character.h"
    #include "level.h"
     
     
    typedef struct
    {
    	Layout		screen;
    	Level		level;
    	Character	player;
    } Scene;
     
     
    #endif	/* _SCENE_H */

    Mais ça ne compile pas, car les deux headers s'incluent l'un l'autre (j'ai déja vu la réponse quelquepart mais je n'arrive pas à remettre la main dessus)

  2. #2
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Sans l'avoir testé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    /* On n'utilise pas un '_' en premier caractère donc je change... */
    #ifndef	H_LAYOUT
    #define	H_LAYOUT
     
    struct sLayout;
     
    #include "point.h"
    #include "plane.h"
    #include "scene.h"
     
     
    typedef struct sLayout
    {
    	Plane		plane;
    	Plane		scrollable;
    	Point		refresh;
    	void		*memory;
    } Layout;
     
     
    void		Layout_DrawScene(Layout *this, Scene *scene, Point *position);
     
     
    #endif	/* _LAYOUT_H */

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    #ifndef	H_SCENE
    #define	H_SCENE
     
    struct sScene;
     
    #include "layout.h"
    #include "character.h"
    #include "level.h"
     
     
    typedef struct sScene
    {
    	Layout		screen;
    	Level		level;
    	Character	player;
    } Scene;
     
     
    #endif	/* _SCENE_H */
    Jc

  3. #3
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    non, toujours Expected specifier-qualifier-list before 'Layout' au moment de compiler

  4. #4
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    finalement je m'en suis sorti en remplaçant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include "point.h"
    #include "plane.h"
    #include "scene.h"
     
     
    typedef struct
    {
    	Plane		plane;
    	Plane		scrollable;
    	Point		refresh;
    	void		*memory;
    } Layout;
     
     
    void		Layout_DrawScene(Layout *this, Scene *scene, Point *position);
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    #include "point.h"
    #include "plane.h"
     
    struct sScene;
     
    typedef struct
    {
    	Plane		plane;
    	Plane		scrollable;
    	Point		refresh;
    	void		*memory;
    } Layout;
     
     
    void		Layout_DrawScene(Layout *this, struct sScene *scene, Point *position);
    Maintenant, est-ce qu'il existe un moyen pour que le prototype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void		Layout_DrawScene(Layout *this, struct sScene *scene, Point *position);
    devienne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void		Layout_DrawScene(Layout *this, Scene *scene, Point *position);
    ?

  5. #5
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par b4u
    Maintenant, est-ce qu'il existe un moyen pour que le prototype
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void		Layout_DrawScene(Layout *this, struct sScene *scene, Point *position);
    devienne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void		Layout_DrawScene(Layout *this, Scene *scene, Point *position);
    ?
    Ben, tu fais un typedef struct au lieu de struct. Tu as su le faire pour Layout et Point, non?
    Sinon, pour ton probleme d'inclusion, je ferai un fichier entete par type exporte (Layout, Scence et Point) et j'incluerais chaque type dont on a besoin pour le prototype de la fonction.

  6. #6
    b4u
    b4u est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 87
    Par défaut
    Ben, tu fais un typedef struct au lieu de struct
    tu veux dire, je redéfinis le type Scene (déja défini dans le second header du premier post, scene.h)?
    la "définition incomplète" (je ne connais pas le terme précis - forward definition je crois) n'est utile que pour remplacer un dans layout.h (qui lui meme inclut layout.h, et c'est bien ça le probleme), pour que le prototype de la fonction Layout_DrawScene() puisse etre compilé (vu que celle-ci prend en paramètre un pointeur vers Scene)... enfin, je n'ai peut-etre pas bien compris ce que tu me suggères.
    Sinon, pour ton probleme d'inclusion, je ferai un fichier entete par type exporte (Layout, Scence et Point) et j'incluerais chaque type dont on a besoin pour le prototype de la fonction.
    je ne vois pas bien, tu pourrais me donner un exemple rapide s'il te plait?
    merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/04/2006, 17h08
  2. Problème de boucles imbriquées
    Par Gnux dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 09/12/2005, 20h26
  3. Problème d'inclusions multiples
    Par Le Furet dans le forum C
    Réponses: 2
    Dernier message: 03/10/2005, 23h59
  4. Problème d'inclusion de pages.
    Par julien85 dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 01/05/2005, 18h06
  5. Problème d'inclusion
    Par degreste dans le forum MFC
    Réponses: 5
    Dernier message: 27/01/2004, 00h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo