zyklische Abhängigkeit zwischen Header-Dateien

8

Ich versuche eine baumartige Struktur mit zwei Klassen zu implementieren: Baum und Knoten. Das Problem ist, dass ich von jeder Klasse eine Funktion der anderen Klasse aufrufen möchte, also sind einfache Vorwärtsdeklarationen nicht genug. Lassen Sie uns ein Beispiel sehen:

Tree.h:

%Vor%

Node.h:

%Vor%

Aufrufender Baum:

%Vor%

Dies ist nur ein einfaches Beispiel zur Veranschaulichung des Problems. Also was ich will, ist eine Funktion von Tree aus einem Node-Objekt aufrufen.

Update # 1: Danke für die Antworten. Ich habe versucht, das Problem wie in Java zu lösen, d. H. Mit nur einer Datei pro Klasse. Es scheint, dass ich anfangen muss, .cpp und .h Dateien zu trennen ...

Update # 2: Nachfolgend, den Hinweisen folgend, habe ich auch die komplette Lösung eingefügt. Danke, Problem gelöst.

    
Jabba 18.01.2010, 20:42
quelle

4 Antworten

5

Deklarieren Sie in den Headern die Elementfunktionen:

%Vor%

Definieren Sie in einer separaten CPP-Datei, die alle erforderlichen Header enthält:

%Vor%

Dies hat auch den Effekt, dass Ihre Header lesbar bleiben, so dass Sie die Oberfläche einer Klasse auf einen Blick sehen können.

    
moonshadow 18.01.2010, 20:46
quelle
2

Befolgen Sie die Hinweise, hier ist die vollständige Lösung.

Tree.h:

%Vor%

Tree.cpp:

%Vor%

Node.h:

%Vor%

Node.cpp:

%Vor%     
Jabba 19.01.2010 15:51
quelle
1

Die Definition von Tree erfordert die Definition von Node , aber nicht umgekehrt, damit Ihre Vorwärtsdeklaration korrekt ist.

Sie müssen lediglich die Definition von Funktionen entfernen, die eine vollständige Definition von Tree vom Klassenkörper Node erfordern, und sie in einer Datei .cpp implementieren, in der vollständige Definitionen beider Klassen enthalten sind .

    
Charles Bailey 18.01.2010 20:47
quelle
0

Können Sie aber die Konstruktor / Destruktor-Bodies in einer .cxx-Datei? Sie könnten Tree.h dort einschließen.

    
Richard Pennington 18.01.2010 20:46
quelle

Tags und Links