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 :

Question sur les inclusions de fichier.


Sujet :

C++

  1. #1
    Membre confirm�
    Inscrit en
    Septembre 2004
    Messages
    187
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par d�faut Question sur les inclusions de fichier.
    Bonsoir � tous.
    Disons que j'ai ce sch�ma de construction:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    #include "Cx.h"
    #include "CY.h"
    #include "CZ.h"
     
    class CA
    {
    //...
    };
    puis une deuxieme classe:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #include "CA.h"
    
    //#include "Cx.h"
    //#include "CY.h"--->la raison de ma question
    //#include "CZ.h"
    
    class CB
    {
    //....
    CA m_a;
    //...
    };
    {
    Maintenant lorsque je compile sans "d�-comment�" ce qui est en rouge, j'obtiend un message du genre:
    In class CB m_a as incomplete type
    Je pensais qu'en incluant "CA.h" dans le .h de CB, CX Y et Z etaient sous-entendu.
    Y a-t'il une fa�on de faire en sorte que ce le soit?
    Auriez-vous des liens vers des articles d�taill�s sur le sujet?

  2. #2
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    Salut,

    Tu te trouve face � une situation que l'on appelle l'inclusion multiple...

    Pour comprendre ce qui se passe, il faut savoir que, lorsque le pr�processeur rencontre une directive #include, il va la remplacer purement et simplement par... le contenu du fichier inclus...

    En plus, il va le faire de mani�re r�cursive (si A inclus B, que B inclus C et que C inclus D, on retrouvera dans A le contenu de B, de C et de D )

    Cela signifie aussi que, si un fichier (Z) inclus A et B et que, de son cot�, A inclus B, tu va te retrouver avec... deux fois le contenu de B ...

    Le r�sultat, c'est que tu trouvera dans Z deux fois le contenu de B (dont une fois qui vient de A), et que tu va de facto ne plus respecter la r�gle de la d�finition unique

    Pour �viter ce probl�me, il faut pr�voir des "gardes anti inclusion multiple" (GuardDogs en anglais).

    Il "suffit" de choisir un identifiant qui sera unique (le plus souvent, on choisi le nom du fichier, extension comprise, en rempla�ant tous les caract�res qui ne sont pas alpha-num�riques par des underscores "_" ) et de l'utiliser sous la forme de
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    #ifndef NOM_DU_FICHIER_HPP
    #define NOM_DU_FICHIER_HPP
    /* le contenu de fichier.hpp */
    /*...*/
     
    #endif // fin du ifndef NOM_DU_FICHIER_HPP
    Mais fais �galement attention au probl�me des r�f�rences circulaires entre les diff�rentes classes
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  3. #3
    Membre confirm�
    Inscrit en
    Septembre 2004
    Messages
    187
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par d�faut
    Bonsoir.
    En fait je ne crois pas que ce soit un probl�me d'inclusion multiple car j'utilise syst�matique les directives "#ifndef" "#define" et "#endif" mais j'ai oubli� de les inscrire dans mon sch�ma...

  4. #4
    Membre confirm�
    Inscrit en
    Septembre 2004
    Messages
    187
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par d�faut
    J'ai �galement regard� du c�t� des inclusions cycliques et je ne pense pas que ce soit l'explication puisqu'il me suffit d'ajouter des "#include "qqch.h" dans la d�claration de ma classe pour que le compilateur accepte.
    Peut-�tre faudrait-il que je poste un peu de mon code mais j'ai peur que ce soit volumineux...

  5. #5
    Expert �minent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activit� : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par d�faut
    L'autre possibilit�, que j'ai effleur�e dans ma premi�re r�ponse, est le risque de d�pendances crois�es (cycliques) entre les diff�rentes classes

    Mais ce n'est, malheureusement, pas, avec le peu de code que tu nous a donn� que nous serons en mesure de confirmer / infirmer ce fait

    Si ce terme ne signifie rien pour toi, je te conseille de faire un tour du cot� de la question de la FAQ qui traite du probl�me
    A m�diter: La solution la plus simple est toujours la moins compliqu�e
    Ce qui se con�oit bien s'�nonce clairement, et les mots pour le dire vous viennent ais�ment. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 f�vrier 2014
    mon tout nouveau blog

  6. #6
    Membre confirm�
    Inscrit en
    Septembre 2004
    Messages
    187
    D�tails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 187
    Par d�faut
    Bonjour!
    J'ai lu les liens que tu m'as donn� et je suis quasiment s�r qu'il ne s'agit pas de �a.
    Par Contre, en compilant le m�me projet sous ubuntu 8.10, le compilateur n'a pas bronch�.... J'ai en fait d�j� constater que sous Fedora 10, mon autre OS, le compilateur etait moins permissif.
    L'explication ne serait-elle pas � chercher de ce c�t� l�?
    P.S.:
    J'ai vraiment la flemme de mettre en ligne le code. �a me demanderait une mise en page interminable...

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. question sur les gestionnaire de fichier
    Par kripteks dans le forum C
    R�ponses: 3
    Dernier message: 07/04/2015, 15h17
  2. Question sur les inclusions
    Par Sekigawa dans le forum EDI, CMS, Outils, Scripts et API
    R�ponses: 2
    Dernier message: 03/04/2008, 11h52
  3. [AIX] Une question sur les fichiers
    Par Bahan dans le forum AIX
    R�ponses: 1
    Dernier message: 11/04/2007, 08h59
  4. [RegEx] Question sur les fichiers
    Par xdoreau dans le forum Langage
    R�ponses: 4
    Dernier message: 21/02/2007, 09h55
  5. Questions sur les fichiers Ressource .RC .RES
    Par dexterz dans le forum Langage
    R�ponses: 10
    Dernier message: 01/08/2005, 10h15

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