Heim > Backend-Entwicklung > C++ > Hauptteil

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

Susan Sarandon
Freigeben: 2024-10-26 12:25:29
Original
399 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!