Virtuelle abstrakte Methode im Konstruktor aufrufen
-
Hallo zusammen
Ich habe ein Problem
Ich habe eine Funktion so definiert:
class Translator { private: .... protected: virtual void initialiseTagTranslators() = 0; .... public: .... };
Wenn ich nun aber versuche diese Funktion im Konstruktor der Klasse aufzurufen bekomme ich einen Fehler beim linken:
error LNK2001: unresolved external symbol "protected: virtual void __thiscall Translator::initialiseTagTranslators(void)"
Hat jemand eine Ahnung woran das liegen könnte?
Gruss schoetz
-
Ich glaube nicht, dass man eine nicht definierte Funktion aufrufen kann. Deine ist nicht definiert.
mfg
Glamdring
-
Wird die Funktion mal aufgerufen? Wenn dann kann sie nur über ein Objekt einer abgeleiteten Klasse, in welcher die Funktion auf jeden Fall redefiniert werden muss, aufgerufen werden.
edit: Der Übersichtlichkeit halber public zu erst...
-
Schoetz schrieb:
Wenn ich nun aber versuche diese Funktion im Konstruktor der Klasse aufzurufen bekomme ich einen Fehler beim linken
Das Problem, zum Zeitpunkt des Basiskonstruktors, gibt es die Abgeleitete noch nicht.
Funktionen im Konstruktor virtuell aufzurufen (oder wie man das jetzt nennt) funktioniert leider nicht
-
Schade ist irgendwie unlogisch finde ich.
Und wiederstrebt meinem OO Prinzip, das ich
von Java her kenne, aber da muss ich mich
wohl umgewöhnen.Danke auf jeden Fall für eure Antworten.
Gruss schoetz
-
Schoetz schrieb:
Schade ist irgendwie unlogisch finde ich.
Ist in der Tat etwas doof, aber die Erklärung dafür ist vernünftig:
Die Reihenfolge der Konstruktorenaufrufe: http://www.schornboeck.net/ckurs/ctor.htm
Somit kann im Ctor von Base keine Methode von Derived aufgerufen werden, denn Derived existiert noch nicht und die Members sind noch nicht konstruiert.