KLasse hat unvollständigen Typ
-
Wahrscheinlich übersehe ich mal wieder das naheliegendste, aber:
ich versuche eine Klasse zu schreiben, welche in einem Namensraum liegen soll und ein anderes Element des selben Raumes benutzt.
Ich versuche das ganze folgendermaßen (nur auf das Problem eingehen, frei erfundenes Beispiel):// KLASSE A namespace std { class string; } namespace sg { class B; class A { private: static int COUNTER; std::string name; B b; A* next; public: A(); }; } #endif // NODE_H
Ich bekomme die Meldung dass sowohl name anls auch b incomplete type haben.
Woran liegt das?Wenn ich dann in der A.cpp noch
#include <iostream> einfüge, erwartet mich ein regelrechtes Feuerwerk an Compilerfehlern und Warnungen.Kann mich einer korrigieren?
Noch eine zweite Frage, unabhängig von dieser,
ich würde gerne meiner Klasse A einen Typ zuweisen,
wofür ich gerne ein enum verwenden würde, wo muss ich dieses enum einführen?
Innerhalb der Klasse, außerhalb?
-
Wenn du eine Variable als Value (also nicht als Pointer) anlegst, muss der Compiler an der Stelle wissen, wie groß das Objekt ist, damit ausreichend Speicher angefordert wird. Das geht nur wenn er den Typ komplett kennt. Dies wiederum geht nicht mit ner Forward Declaration sondern nur mit einem include des entsprechenden Headers. Hat also nix mit namespaces zu tun.
Wenn du name und b hingegen als pointer anlegst, kannst du weiterhin mit der forward-declaration arbeiten.
-
Vielleicht hilft dir das hier zum Verständniss: