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 multiple etc


Sujet :

C++

  1. #1
    GO
    GO est déconnecté
    Membre confirmé Avatar de GO
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par défaut Inclusion multiple etc
    qu'est ce que l'inclusion multiple ?

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Inclure plusieurs fois un même fichier dans une unité de compilation, généralement de manière indirecte.

  3. #3
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    D'ailleurs comment l'éviter de manière efficasse ?
    (Notemment lorsque 2 fichiers d'en tête ont chacun besoin de l'autre)

    Exemple:

    A.h
    B.h
    Le #ifndef #define #endif c'est bien mais des fois, chez moi, j'ai toujours des erreurs (dû à ça)-_-

  4. #4
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par JulienDuSud
    Exemple:

    A.h
    B.h
    Le #ifndef #define #endif c'est bien mais des fois, chez moi, j'ai toujours des erreurs (dû à ça)-_-
    Là ce n'est pas un problème d'inclusion multiple, mais un problème d'inclusion circulaire. La manière de l'éviter c'est de ne pas mettre plus de choses que nécessaire dans les en-têtes, en particulier utiliser la déclaration de classe (class foo à la place de l'inclusion de l'en-tête définissant la classe quand on n'a pas besoin de la définition.

  5. #5
    GO
    GO est déconnecté
    Membre confirmé Avatar de GO
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par défaut
    Mon problème c que j'appelle dans le main une fichier de déclaration de classe, mais la définition est dans un autre fichier appelant lui aussi le fichier de déclaration de classe.

    Lorsque j'appelle la classe est-ce que le fichier de définition est implicitement inclu ? c quoi un module objet contenant la définition de la classe ? Pourquoi ne pas tout mettre avec la déclaration de la classe (déclaration+définition) ?

    Davance merci

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 258
    Par défaut
    Citation Envoyé par GO
    Mon problème c que j'appelle dans le main une fichier de déclaration de classe, mais la définition est dans un autre fichier appelant lui aussi le fichier de déclaration de classe.
    Il faut dans ce cas utiliser des gardes d'inclusion. Typiquement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Fichier MaClasse.h
    #ifndef MaClasse_h
    #define MaClasse_h
     
    // Declarations ...
     
    #endif // MaClasse_h
    Avec cette methode, lorsque tu fais #include "MaClasse.h", il n'est effectivement inclus par le preprocesseur que s'il ne l'est pas deja dans l'unite de traduction courante.

    Citation Envoyé par GO
    Lorsque j'appelle la classe est-ce que le fichier de définition est implicitement inclu ?
    Non, il n'y a pas d'inclusion implicites en C++.

    Citation Envoyé par GO
    Pourquoi ne pas tout mettre avec la déclaration de la classe (déclaration+définition) ?
    Avec une ecriture a la Java (declaration et definition ensemble), ton fichier va devenir moins lisible : tu n'as en general pas besoin de savoir comment une fonction est codee pour l'utiliser. Mais surtout, tu introduit des dependances de compilation inutiles : si tu modifies le code d'une fonction (optimisation, re-ecriture, changement d'algorithme, etc.) tous les fichiers incluant le fichier que tu as modifie vont devoir etre recompiles. Avec la separation .h/.cpp, ce n'est pas le cas tant que tu ne modifies pas l'interface d'une classe.

  7. #7
    GO
    GO est déconnecté
    Membre confirmé Avatar de GO
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 114
    Par défaut
    Il faut dans ce cas utiliser des gardes d'inclusion. Typiquement :

    Code :
    // Fichier MaClasse.h
    #ifndef MaClasse_h
    #define MaClasse_h

    // Declarations ...

    #endif // MaClasse_h
    J'ajoute cela en haut du fichier main(); et la définition de la classe quand est-elle appelée ?

Discussions similaires

  1. probleme d'inclusion multiple
    Par chrono23 dans le forum C++
    Réponses: 3
    Dernier message: 02/11/2006, 10h30
  2. probleme d'inclusions multiple
    Par porco dans le forum C++
    Réponses: 4
    Dernier message: 10/10/2006, 10h08
  3. [Headers] Inclusion multiple
    Par vinzzzz dans le forum C
    Réponses: 2
    Dernier message: 14/02/2006, 18h03
  4. inclusions multiples c++
    Par persam dans le forum C++
    Réponses: 2
    Dernier message: 30/11/2005, 14h09
  5. Problème d'inclusions multiples
    Par Le Furet dans le forum C
    Réponses: 2
    Dernier message: 03/10/2005, 23h59

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