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 :

Double / Triple inclusion


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 25
    Points : 19
    Points
    19
    Par défaut Double / Triple inclusion
    Salut à tous,

    J'ai un soucis avec les inclusions multiples, j'ai retourné le problème dans tous les sens mais ...
    Donc voilà le soucis :

    J'ai 3 classes qui ont chacune besoin des 2 autres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    -----------------------------------------
    #include "Complexe.h"
    #include "Matrice.h"
    Class Reel {}
    -----------------------------------------
    #include "Reel.h"
    #include "Matrice.h"
    Class Complexe {}
    -----------------------------------------
    #include "Complexe.h"
    #include "Reel.h"
    Class Matrice {}
    -----------------------------------------
    J'ai essayé en mettant des "class ma_classe;" un peu partout mais rien n'y fait le compilo veut rien savoir (erreurs typiques dues à la double inclusion).

    Faites moi signe si c'est pas clair ou s'il manque des infos.

    Pierrot

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Tu dois séparer l'implémentation des headers, et tu pourras ainsi déclarer chaque classe séparément:
    Code Reel.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Complexe;
    class Matrice;
     
    class Reel
    {
    	...
    };
    Code Complexe.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Reel;
    class Matrice;
     
    class Complexe
    {
    	...
    };
    Code Matrice.h : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    class Reel;
    class Complexe;
     
    class Matrice
    {
    	...
    };
    Code Complexe.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include "Complexe.h"
    #include "Reel.h"
    #include "Matrice.h"
     
    ...
    Code Reel.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include "Reel.h"
    #include "Complexe.h"
    #include "Matrice.h"
     
    ...
    Code Matrice.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #include "Matrice.h"
    #include "Complexe.h"
    #include "Reel.h"
     
    ...
    Enfin ça, c'est la règle générale. Si tu as une classe qui contient directement un objet d'une autre (et non un simple pointeur ou une simple référence), tu devras inclure un header dans un autre.
    Et dans ce cas, n'oublie pas de mettre des gardes d'inclusions qui t'éviteront les erreurs de définition multiple de classe. Mais c'est seulement une fois que tu auras réussi à empêcher les erreurs d'inclusion cyclique.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Tout es expliquer ici :
    http://cpp.developpez.com/faq/cpp/in...erence_croisee
    L'exemple est sur 2 classes mais à priori pas de problèmes avec plus.
    Linux > *

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2008
    Messages : 25
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup de votre aide ça marche nickel !
    Pas évident à comprendre cette histoire !

Discussions similaires

  1. Réponses: 39
    Dernier message: 10/08/2014, 19h33
  2. [RegExp] Supprimer caractères en double/triple/n
    Par Msieurduss dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/10/2012, 11h45
  3. [Visual studio 2010] bug : menus et icônes en double ou triple
    Par thegritch dans le forum Visual Studio
    Réponses: 1
    Dernier message: 19/09/2011, 14h14
  4. Double inclusion de structure
    Par FabaCoeur dans le forum C
    Réponses: 2
    Dernier message: 01/03/2009, 17h43
  5. [Mail] Problème envoi de mail double/triple
    Par black-out dans le forum Langage
    Réponses: 1
    Dernier message: 18/10/2007, 10h23

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