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

Langage C++ Discussion :

Double inclusion mais une seule possible.


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif Avatar de Sahengette
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 79
    Par défaut Double inclusion mais une seule possible.
    Bonjour,
    je suis face à un problème :
    J'ai une classe A, qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #ifndef A_HPP
    #define A_HPP
    //A.hpp
    class A
    {
    /*...*/
    }
    #endif
    Et je veux l'utiliser dans mon main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include "A.hpp"
    int main()
    {
    /* ... */
    return 0;
    }
    Donc ca, super ca fonctionne.

    Maintenant j'ai une deuxieme classe, B, qui a besoin de A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //A.hpp
    #include "A.hpp"
    class B {
    private : 
       A m_ObjetA;
    };
    Et ca ne marche pas, c'est normal, le main inclut déjà une fois A et la protection anti-multi-inclusions empêche d'inclure plus d'une fois.
    La seule solution est d'enlever la protection, mais dés que je l'enleve, ca ne marche plus car dans mon programme la classe A est*en collision avec une autre classe et ca crée une inclusion en boucle ...

    Comment je dois faire pour inclure A dans B sans casser la protection anti inclusions multiples ?

    Merci

  2. #2
    Membre émérite
    Avatar de mitkl
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 364
    Par défaut
    tu devrais largement t'en sortir grâce aux forward declarations : http://cpp.developpez.com/faq/cpp/?p...TES_ou_inclure

  3. #3
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Inutile, il n'y a pas de cycle, là.

    Normalement, ça devrait marcher sans problème.
    As-tu essayé de compiler ce que tu nous a montré comme code ?

  4. #4
    Membre actif Avatar de Sahengette
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 79
    Par défaut
    Oui mais j'ai expliqué qu'il y a une autre classe, qui elle crée un cycle infini avec B, donc imposible d'enlever la protection, et les forwards declarations sont insuffisantes car je veux une instance de l'objet avec toutes ces méthodes, quand je compile j'ai une erreur :
    erreur: field ‘m_ObjetA’ has incomplete type

  5. #5
    Membre émérite
    Avatar de Ekleog
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    448
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 448
    Par défaut
    Est-ce qu'on pourrait avoir le code des classes, même en exemple ?
    Parce que donner en exemple un code qui fonctionne, ça n'aide pas à comprendre le problème ...

  6. #6
    Membre actif Avatar de Sahengette
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 79
    Par défaut
    J'ai une classe Shader une classe Renderer et le main :
    Shader a besoin de Renderer car Shader déclare Renderer comme classe amie.
    Renderer a besoin de Shdaer car un de ses attributs est un Objet Shader.
    Dans le main pour l'instant j'utilise seulement la classe Shader, donc j'ai seulement l'include pour l'en tete des shaders (j'experimente encore la classe Renderer), je cherche une solution donc pour inclure deux fois Shader (dans le main et dans l'en tete de Renderer), et parceque plus tard je serais forcement confronté à ce problème car ma classe Shader tendera à être utilisé dans beaucoup d'endroit, donc beaucoup d'inclusions nécessaires, mais une seule possible.

Discussions similaires

  1. Appel de plusieurs pages .js, mais une seule exécutée.
    Par andyroddick dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 02/07/2010, 16h17
  2. Réponses: 11
    Dernier message: 22/04/2008, 15h32
  3. [WPF-Blend] Plusieurs objets mais une seule animation
    Par Tuizi dans le forum Framework .NET
    Réponses: 12
    Dernier message: 11/12/2007, 17h10
  4. 3 tables liées mais une seule ligne de retour ?
    Par seb_perl dans le forum Requêtes
    Réponses: 2
    Dernier message: 06/01/2007, 12h20

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