Zyklus auflösen
-
Hallo
ich habe ein kleines C++ Problem mit einer Art zyklischen Abhängigkeit. Folgendes (vereinfachtes) Beispiel beschreibt das Problem:
// A.h #include "B.h" class A { public: enum Foo { ... }; B* b; };
// B.h #include "A.h" class B { public: B(const A::Foo foo); };
Ferner gibt es wie üblich eine A.cpp und B.cpp, wobei A.cpp den Header A.h und B.cpp den Header B.h inkludiert.
In A.h inkludiere ich B.h, da ich in A einen Zeiger auf B habe. In B.h inkludiere ich A.h, da ich den Typ A::Foo in B brauche. Nur leider kompiliert das jetzt nicht - wenn z.B. A.cpp übersetzt wird, dann wird A.h inkludiert und daraufhin B.h und dann wird der Compiler in der Klassendeklaration B auf A::Foo stoßen, wobei er allerdings A::Foo noch nicht kennt => Fehler.
Eigentlich braucht nur die Klasse A die Klasse B. Also eigentlich wäre es nur notwendig, dass A.h "B.h" inkludiert und "B.h" sollte _nicht_ "A.h" inkludieren.
Ich möchte gerne das enum Foo in A lassen. Wie kann man das lösen? Danke!
-
Kannst du das enum aus A nicht auslagern?
-
Naja, wie gesagt ich hätte es gerne in A gehabt. Aber ich glaube es bleibt mir wohl nix anderes übrig als es aus A zu entfernen und in B.h zu definieren.
-
Wie wäre es mit forward declaration?
// A.h //kein include class B; //forward declaration, da du ja nur einen Zeiger hast class A { public: enum Foo { ... }; B* b; };