Heim  >  Artikel  >  Backend-Entwicklung  >  Wie gehe ich mit zirkulären Header-Abhängigkeiten in C um, wenn Klassen aufeinander verweisen?

Wie gehe ich mit zirkulären Header-Abhängigkeiten in C um, wenn Klassen aufeinander verweisen?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 12:25:29400Durchsuche

How to Handle Circular Header Dependencies in C   When Classes Reference Each Other?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn