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++ Problem

    Code:

    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 b bekannt sein.

    Ich würde dir raten, die Methode in einer Implementierungsdatei (.cpp) zu definieren und den Header der Klasse b auch 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.


Anmelden zum Antworten