Unvollständiger Typ
-
Hallo,
ich habe die zwei Klassen vorgegeben (wie unten schemenhaft dargestellt) und möchte gerne in Klasse b eine Variablen vom Typ c mit Paramaterübergabe erstellen(wie in Funktion foo).
Der Compiler gibt mir aber immer folgenden Fehler:Fehler: Variable »c tmp« hat Initialisierung, aber unvollständigen TypWarscheinlich ist das nur ein kleiner Fehler ich komme aber einfach nicht drauf

class b; class c; class b{ public: ///////////// void foo(){ c tmp(1); } ///////////// }; class c{ int n; public: c(int n): n(n){}; }; int main(){ return 0; }
-
Wenn du
cinstanziierst (d.h. Instanzen der Klasse erstellst), muss die Klasse ein vollständiger Typ sein. Die Definition muss also zum Zeitpunkt der Verwendung vorliegen.Das kannst du umgehen, indem du entweder
cfrüher definierst oderb::foo()in Deklaration und Definition aufteilst, wobei letztere nachcauftreten muss.
-
Danke für die schnelle Antwort, da ich nicht die Möglichkeit habe c vor b zu definieren werde ich die Klassen in Deklaration und Definition aufteilen müssen.
Funktioniert es dann auch, dass ich in b c instanziiere(wie in dem Beispiel) aber auch gleichzeitig in c b instanziiere ?
-
Wenn du mit "in b" "in Methodendefinitionen von b" meinst: Ja.
Wenn du "in der Klassendefinition von b" meinst: Nein.Die Aufteilung von Funktionen in Deklaration (im Header) und Definition (in Implementierungsdatei) ist in C++ üblich und sinnvoll. Ich würde es grundsätzlich auch tun, wenn ich nicht muss, da man sich so unnötige Abhängigkeiten spart. Der Code im Header wird nämlich kleiner, und oft kann man sogar
#includes erst in der .cpp-Datei verwenden.
-
Super jetzt funktioniert es.
(Mit "in b" meinte ich in Methodendefinitionen, sollte mich klarer ausdrücken
)Danke nochmal.