Maison >développement back-end >C++ >Comment gérer les dépendances d'en-tête circulaire en C lorsque les classes se référencent les unes les autres ?
En-têtes s'incluant les uns les autres en C
Lors de la création de code en C où les classes se référencent les unes les autres, il est crucial de gérer de manière appropriée l'inclusion de l'en-tête fichiers.
Inclure le placement des instructions
Par défaut, les fichiers d'en-tête sont inclus dans les macros (gardes #ifndef) pour éviter une récursion infinie si les en-têtes se référencent les uns les autres. Dans l'exemple fourni, placer les instructions #include à l'intérieur des macros résout le problème où chaque classe inclut l'en-tête de l'autre.
Déclarations Forward
Dans la situation décrite, le Le compilateur rencontre la définition de la classe B avant la classe A à laquelle il fait référence. Pour résoudre ce problème, une déclaration directe de A est requise avant la définition de la classe B :
<code class="c++">class A; // Declare A's existence</code>
Cela informe le compilateur que A est une classe, sans avoir besoin de sa définition complète à ce stade.
Code révisé
Voici le code révisé intégrant à la fois la déclaration directe et l'inclusion de la macro interne :
<code class="c++">// A.h #ifndef A_H_ #define A_H_ #include "B.h" class A; // Forward declaration class A { private: B b; public: A() : b(*this) {} }; #endif /*A_H_*/ // B.h #ifndef B_H_ #define B_H_ #include "A.h" class B { private: A& a; public: B(A& a) : a(a) {} }; #endif /*B_H_*/</code>
En suivant ces directives, les classes peuvent faire référence à chaque autre correctement, évite les erreurs de compilation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!