GCC Problem: invalid use of incomplete type 'struct b'
-
Hallo,
ich habe ein Problem, was ich partout nicht verstehe:
GCC sagt mir:
Description Resource Path Location Type
invalid use of incomplete type 'struct b' jobpool.hpp Header files 8 C/C++ Problem
forward declaration of 'struct b' jobpool.hpp Header files 3 C/C++ ProblemCode:
class b; class a { template<class c> void blub(const c& bar,b& foo) { foo.i=0; } }; class b { a a_; int i; };b wird per Refernz übergeben, daher sollte die Forwärdsdeklaration reichen, blub selbst wird nie aufgerufen.
Was ist falsch?
-
Die Referenz reicht nicht, weil sie innerhalb der Funktion dereferenziert wird. Um auf die Member zuzugreifen, muss die Klasse
bbekannt sein.Ich würde dir raten, die Methode in einer Implementierungsdatei (.cpp) zu definieren und den Header der Klasse
bauch erst dort einzubinden.
-
Werden aber nicht die Körper von Templatefunktionen bei einer Instantiierung kompiliert`?!
-
Hast du die neuste Version des GCC?
VC++ 08 kompiliert mir das auch wenn ich die Funktion aufrufe. ( Obwohl unabhängige namen ob templates oder nicht gleich behandlet werden sollten..) [14.6/8]
-
Ich nutze ein 4.3.x build, was eigentlich stable sein sollte.