Heim >Backend-Entwicklung >C++ >Wie kann die Einbeziehung kreisförmiger Header in C vermieden werden?
Header, die einander in C einschließen
C-Headerdateien können einander einschließen, aber bestimmte Richtlinien müssen befolgt werden, um Kompilierungsfehler zu vermeiden.
Platzierung von Include-Anweisungen
Forward-Deklarationen
Betrachten Sie den folgenden Code, in dem zwei Klassen, A und B, einander einschließen:
<code class="cpp">// A.h #ifndef A_H_ #define A_H_ #include "B.h" class A { public: A() : b(*this) {} private: B b; }; #endif</code>
<code class="cpp">// B.h #ifndef B_H_ #define B_H_ #include "A.h" class B { public: B(A& a) : a(a) {} private: A& a; }; #endif</code>
In diesem Szenario trifft der Compiler zuerst auf Klasse B, aber A wurde noch nicht deklariert. Um dieses Problem zu lösen, sollte eine Forward-Deklaration von A vor der Definition von B eingefügt werden:
<code class="cpp">// B.h #ifndef B_H_ #define B_H_ class A; // Forward declaration of class A #include "A.h" class B { public: B(A& a) : a(a) {} private: A& a; }; #endif</code>
Diese Forward-Deklaration informiert den Compiler darüber, dass A eine Klasse ist, auch wenn es sich um eine vollständige Definition handelt ist noch nicht verfügbar.
In der Praxis
Im Allgemeinen sollten #include-Anweisungen innerhalb von Include-Guards platziert werden, und Forward-Deklarationen sollten verwendet werden, wenn auf einen Header verwiesen werden muss zu einer Klasse, die in einem später eingefügten Header definiert wird. Durch Befolgen dieser Richtlinien können Sie Kompilierungsfehler vermeiden, die durch zirkuläre Includes verursacht werden.
Das obige ist der detaillierte Inhalt vonWie kann die Einbeziehung kreisförmiger Header in C vermieden werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!