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 :

Inclusion croisée problématique


Sujet :

C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 29
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Points : 9
    Points
    9
    Par défaut Inclusion croisée problématique
    Bonjour (bonsoir ou bonne nuit ) à tous

    J'ai un projet dont les fichiers header et le main suivent le shéma suivant

    main.cpp : inclue : engine.h
    engine.h : inclue : item.h, global.h
    item.h : inclue : graphicitem.h, global.h
    graphicitem.h : inclue : global.h
    global.h : inclue : engine.h

    La seule chose importante à savoir sur les classes contenues est que item hérite de graphicitem.

    J'ai reussi à avoir le probleme avec le code suivant :

    main.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <engine.h>
    #include <global.h>
     
    int main()
    {
    }
    engine.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifndef ENGINE_H
    #define ENGINE_H
     
    class Engine;
     
    #include <global.h>
    #include <item.h>
     
    class Engine {};
     
    #endif
    item.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #ifndef ITEM_H
    #define ITEM_H
     
    class Item;
     
    #include <global.h>
    #include <graphicitem.h>
     
    class Item : public GraphicItem {};
     
    #endif
    graphicitem.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #ifndef GRAPHICITEM_H
    #define GRAPHICITEM_H
     
    class GraphicItem;
     
    #include <global.h>
     
    class GraphicItem {};
     
    #endif
    global.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #ifndef GLOBAL_H
    #define GLOBAL_H
     
    #include <engine.h>
     
    #endif
    et enfin les fichier engine.cpp, item.cpp, graphicitem.cpp et global.cpp ne contenant que la directive #include avec le nom du header correspondant.

    Le préprocesseur m'affiche le message suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    In file included from ./engine.h:7,
    from ./global.h:4,
    from graphicitem.h:6,
    from graphicitem.cpp:1:
    ./item.h:9: error: invalid use of incomplete type 'struct GraphicItem'
    graphicitem.h:4: error: forward declaration of 'struct GraphicItem'
    Je sais plus trop où ni quoi chercher après de nombreuses tentatives vaines sur le net.
    Merci d'avance.

  2. #2
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    Par défaut
    Le code que tu as fournis compile sans problèmes chez moi (GCC)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 29
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    As tu bien ajouté les fichier engine.cpp, graphicitem.cpp, item.cpp, global.cpp ne contenant que les directives #include avec le nom du header correspondant?

    engine.cppgraphicitem.cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <graphicitem.h>
    item.cppglobal.cpp...

    Si oui, je n'y comprend plus rien

  4. #4
    screetch
    Invité(e)
    Par défaut
    ton include "global" casse tout, et je ne vois pas bien a quoi il sert si ce n'est inclure tous les fichiers inutiles dans le mauvais ordre.
    aussi, je ne vois pas trop quelle est la question, que souhaites tu faire ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 29
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Je voudrais pouvoir acceder à un pointeur Engine * partout dans mon projet. Ce pointeur serait stocké dans global.h, fichier inclu par tout les autres header.

  6. #6
    screetch
    Invité(e)
    Par défaut
    mais GraphicItem commence par inclure Engine qui inclut Item qui a besoin de GraphicItem, ca ne marchera jamais. De plus, je ne suis pas certain que GraphicItem et Item aient vraiment besoin de la classe Engine, ca dénote une erreur de conception quelque part.
    Enfin si vraiment tu tiens a ce que tout le monde connaisse tout le monde, tu ne devrais pas inclure global.h dans tous les fichiers .h mais seulement dans les fichiers .cpp. mais selon moi c'est une idée, euh, dont on pourrait debattre.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    12
    Détails du profil
    Informations personnelles :
    Âge : 29
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 12
    Points : 9
    Points
    9
    Par défaut
    Ok merci je vais voir ce que je peux faire

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

Discussions similaires

  1. [Wamp] WAMP et inclusions problématiques
    Par maxime17s dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 18/01/2008, 09h23
  2. Inclusion de fichier .h
    Par Tony49 dans le forum C++Builder
    Réponses: 2
    Dernier message: 06/11/2002, 11h10
  3. Requète croisée et affichage
    Par BakaOnigiri dans le forum SQL
    Réponses: 2
    Dernier message: 31/10/2002, 11h28
  4. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30
  5. Inclusion de fichiers en IDL
    Par babou dans le forum CORBA
    Réponses: 10
    Dernier message: 30/07/2002, 16h47

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