Problem mit pure virtual



  • Hallo,

    Ich habe grad einen Knoten... Meiner Meinung nach müsste folgendes funktionieren (Pseudocode, der Compiler ist der aktuelle Intel-C++):

    class a // abstract
    	{
    	protected:
    		virtual void func() = 0;
    
    		a(...)
    		{
    			func();
    		}
    
    	public:
    		virtual ~a() {}
    	};
    
    	class b : public a // abstract
    	{
    	protected:
    		b(...) : a(...)
    		{
    		}
    	};
    
    	class c : public b
    	{
    
    	public:		
    		c(...) : b(...) {}
    
    		void func();
    	};
    
    	void c::func()
    	{
    		// mach was
    	}
    

    Tut es aber nicht. Sieht jemand wo der Haken ist?

    edit: Achso, der Fehler tritt btw. erst beim Linken auf, syntaktisch korrekt ist der Code also:

    Undefined symbols:
      "__ZN5a7funcEv", referenced from:
          __ZN5a14blubb in main.o
    ld: symbol(s) not found
    

    Lustigerweise wird, wenn ich die Funktion einfach nur virtual mache und eine Definition einfüge immer a::func aufgerufen. Ich bin echt irgendwie eingerostet. Ich hab das schon tausendmal gemacht, aber irgendwie bekomm ich das da oben nicht zum laufen...

    Gruß, Christian



  • Zunächst einmal: du kannst keine virtuellen Funktionen im Konstruktor aufrufen, da das Objekt (und insbesondere der Vtable) zu dem Zeitpunkt noch nicht vollständig sind.

    Was die Fehlermeldung angeht ist es schwer, dazu etwas zu sagen, weil "blablabla" in deinem gepostetet Code nirgendwo vorkommt. Daraus läßt sich leider nicht erkennen, was genau dem Compiler/Linker fehlt.



  • dooooomi schrieb:

    Zunächst einmal: du kannst keine virtuellen Funktionen im Konstruktor aufrufen, da das Objekt (und insbesondere der Vtable) zu dem Zeitpunkt noch nicht vollständig sind.

    Args, ich sags doch: eingerostet. Dank Dir! Das war genau das Problem!


Anmelden zum Antworten