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.
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.
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 .
Können Sie aber die Konstruktor / Destruktor-Bodies in einer .cxx-Datei? Sie könnten Tree.h dort einschließen.
Tags und Links dependencies c++ header cyclic