[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; }; #endifView:
//View.hpp #ifndef VIEW_HPP #define VIEW_HPP #include "Beobachter.hpp" class View : public Beobachter { public: View(); void update(); }; #endifWenn ich nun versuche in der Body Datei (cpp)
//View.cpp #include "View.hpp" View::View() : Beobachter() {} // Aufruf der Base Klassbekomme ich Linkfehler:
View.o: In function
View::View()': View.cpp:(.text+0x8): undefined reference tovtable for View'
View.o: In functionView::View()': View.cpp:(.text+0x18): undefined reference tovtable 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(); }; #endifWie 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...