Einschließende Header in C
Beim Erstellen von Code in C, in dem Klassen aufeinander verweisen, ist es wichtig, die Einbeziehung von Headern angemessen zu handhaben Dateien.
Platzierung von Anweisungen einbeziehen
Standardmäßig sind Header-Dateien in Makros enthalten (#ifndef-Schutzvorrichtungen), um eine unendliche Rekursion zu verhindern, wenn Header aufeinander verweisen. Im bereitgestellten Beispiel löst das Platzieren der #include-Anweisungen innerhalb der Makros das Problem, dass jede Klasse den Header der anderen Klasse einschließt.
Forward-Deklarationen
In der beschriebenen Situation wird die Der Compiler trifft auf die B-Klassendefinition vor der A-Klasse, auf die er verweist. Um dieses Problem zu lösen, ist eine Vorwärtsdeklaration von A vor der B-Klassendefinition erforderlich:
<code class="c++">class A; // Declare A's existence</code>
Dadurch wird der Compiler darüber informiert, dass A eine Klasse ist, ohne dass zu diesem Zeitpunkt eine vollständige Definition erforderlich ist.
Überarbeiteter Code
Hier ist der überarbeitete Code, der sowohl die Vorwärtsdeklaration als auch die Einbindung von Inside-Makros enthält:
<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>
Durch Befolgen dieser Richtlinien können Klassen jeweils darauf verweisen Andere korrekt, Evitando-Kompilierungsfehler.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit zirkulären Header-Abhängigkeiten in C um, wenn Klassen aufeinander verweisen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!