Wo muss eine Virtuelle Funktion implementiert sein?
-
Hallo,
ich kämpfe gerade mit virtuellen Funktionen. Im Prinzip habe ich folgende Datein:base.h: class base { [..] public: virtual void do(); }base.cpp: #include <base.h> void base::do(){ cout <<"doing something";}derived.h #include <"base.h"> class derived : public baseBeim compilieren bekomme ich dann:
undefined reference to `Base::do() const'Der Fehler verschwindet, wenn ich entweder "virtual" entferne, oder wenn ich do() als virtual void do(){cout <<"doing it inline";}; implementiere.
Ich will meine Implementierung der virtuellen Funktion aber in der base.cpp haben, leider funktioniert das nicht. Sämtliche Beispiele im Web über virtual sind immer in einem Sourcefile, daher weiß ich nicht, ob es prinzipiell ok ist, virtuelle Funktionen auch extern zu implementieren.
Oder mache ich irgendwas anderes falsch? Danke für tips

-
Du kompilierst das base.cpp aber schon mit, oder?
-
Dein Code ist voller Fehler. Wahrscheinlich ist einer davon der echte, die anderen sind nur um uns hier zu ärgern. Wie wärs, wenn du mal ein Minimalbeispiel herstellst, das man auch posten kann?
-
Wollte auch grad mal Fragen, wo genau er denn den Fehler bringt?
Also für welchen datei und zeile?denn du kannst eigentlich schon die virtuelle funktion in einer .cpp implementieren.
-
fr33g schrieb:
Wollte auch grad mal Fragen, wo genau er denn den Fehler bringt?
Also für welchen datei und zeile?denn du kannst eigentlich schon die virtuelle funktion in einer .cpp implementieren.
Ok, sorry für die Fehler im Code. Wenn das im Prinzip gehen sollte, suche ich mal weiter den Fehler, und produziere dann ein Minimalbeispiel (wahrscheinlich finde ich den Fehler dann eh

Danke schonmal für die Antworten,
Grüße
Thomas
-
Also ich würd' sagen, das inline funktioniert entweder, weil es wegoptimiert, da nicht benutzt wird oder weil du base.cpp nicht dazulinkst.
-
Also, ihr hattet recht, ich hab die .cpp tatsächlich nicht ordnungsgemäß verlinkt, was mir deshalb nicht aufgefallen ist, weil ich nur inline-Funktionen auch tatsächlich benutzt habe.
Danke für die Hilfe,
Grüße,
Thomas