qu'est ce que l'inclusion multiple ?
qu'est ce que l'inclusion multiple ?
Inclure plusieurs fois un même fichier dans une unité de compilation, généralement de manière indirecte.
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #include "B.h"
Le #ifndef #define #endif c'est bien mais des fois, chez moi, j'ai toujours des erreurs (dû à ça)-_-
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 #include "A.h"
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 fooEnvoyé par JulienDuSud
à la place de l'inclusion de l'en-tête définissant la classe quand on n'a pas besoin de la définition.
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![]()
Il faut dans ce cas utiliser des gardes d'inclusion. Typiquement :Envoyé par GO
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.
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
Non, il n'y a pas d'inclusion implicites en C++.Envoyé par GO
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.Envoyé par GO
J'ajoute cela en haut du fichier main(); et la définition de la classe quand est-elle appelée ?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
Partager