[erledigt] virtual und vererbung
-
Hallo,
ich versuche eine Datei in Haeder und Body aufzuteilen.
Ich hab ein Interface und eine View Klasse, die von dem Interface erbt.
Interface:
//Beobachter.hpp #ifndef BEOBACHTER_HPP #define BEOBACHTER_HPP class Beobachter { public: virtual void update() = 0; }; #endif
View:
//View.hpp #ifndef VIEW_HPP #define VIEW_HPP #include "Beobachter.hpp" class View : public Beobachter { public: View(); void update(); }; #endif
Wenn ich nun versuche in der Body Datei (cpp)
//View.cpp #include "View.hpp" View::View() : Beobachter() {} // Aufruf der Base Klass
bekomme ich Linkfehler:
View.o: In function
View::View()': View.cpp:(.text+0x8): undefined reference to
vtable for View'
View.o: In functionView::View()': View.cpp:(.text+0x18): undefined reference to
vtable for View'
collect2: ld returned 1 exit status
make: *** [first] Error 1Wenn ich den Code in die Haeder Datei schreibe, dann geht es, aber so sollte es nicht sein.
Andere View.hpp//View.hpp #ifndef VIEW_HPP #define VIEW_HPP #include "Beobachter.hpp" class View : public Beobachter { public: View() : Beobachter(); // Hier der Aufruf der Base Klass void update(); }; #endif
Wie kann ich die Linkfehler wegbekommen mit dem Code in der cpp Datei?
Gruß
-
http://gcc.gnu.org/faq.html#vtables
Ich hab zwar noch ein bisschen Verständnisschwierigkeiten, aber es scheint ja an den Übersetzungseinheiten zu liegen, da deine zweite Lösung funktioniert.
-
wie sollte der compiler eine vtable für View machen können, wenn du die funktion update nirgends definierst? immerhin muss in die vtable deren adresse hinein.
-
Übersetzt du View.cpp überhaupt?
-
Vielen Dank
ich wusste, dass ich die update Funktion schreiben muss, aber der Fehler hat nicht direkt auf sie verwiesen, deshalb war ich verwirrt und versuchte erstmal den Fehler zu beseitigen.
Also nachdem ich die update Funktion implementiert habe, kompiliert er ohne Probleme.
Danke...