Vererbung bei Klassen - Problem
-
Hi Leute
ich habe eine BasisKlasse:
class Cindicator { public: Cindicator( Cdatasource *_data ); virtual ~Cindicator(); virtual void InitIndicator(); };und eine davon abgeleitete Klasse:
class Cexpmovingaverage : public Cindicator { public: Cexpmovingaverage( Cdatasource *_data ); virtual ~Cexpmovingaverage(); virtual void InitIndicator(); };PS: die Klassen sind hier auf das Nötigste reduziert.
Bisher war InitIndicator nur eine Funktion in der abgeleiteten Klasse.
D.h. die war nicht virtual ( und die Destruktoren bisher auch nicht ) und war somit in der Basisklasse auch nicht definiert.Nun hab ich die virtual gemacht, weil ich die Funktion unabhängig vom Typ des Objekts ( Basisklasse oder abgeleitet ) aufrufen will.
Nur leider schlägt der Buildprozess ( Make ) jetzt einfach fehl, seit ich die Funktion und die Destruktoren virtualisiert habe.
( ohne bestimmte Fehlermeldung ).IDE ist Eclipse. Compiler ist g++. Betriebssystem ist GentooLinux
Fehler:
Description Resource Path Location Type
make: *** [Xcalibur] Error 1 Xcalibur line 0 C/C++ ProblemJemand ne Idee?
Sollte doch eigentlich so funktionieren.
-
Ich hab zwar keine Ahnung was dein Fehler bedeuten soll, aber folgendes "Minimal"beispiel:
#include <iostream> typedef int Cdatasource; class Cindicator { public: Cindicator( Cdatasource *_data ) {} virtual ~Cindicator() {} virtual void InitIndicator() {} }; class Cexpmovingaverage : public Cindicator { public: Cexpmovingaverage( Cdatasource *_data ) : Cindicator(0) {} virtual ~Cexpmovingaverage() {} virtual void InitIndicator() {} }; int main() { Cindicator a(0); Cexpmovingaverage b(0); }Läuft bei mir ohne Fehler oder Warnungen durch...
-
das is ja genau das problem, dass ich keinen fehler vom compiler bekomme...
Anmerkung: die indicator-class ist eigentlich nur eine verallgemeinerung. Es existieren in Wirklichkeit nur abgeleitete Klassen ( da gibts noch mehr ).
Aber das is grad nich relevant denk ich.Wenn ich das virtual entferne und jeder abgeleiteten Klasse die Funktion "un-virtualisiert" spendiere, gibts keine Probleme.
-
Hmm die Experten sind sprachlos, genauso wie ich...
Ob es sinnvoll ist, wenn ich das Project mal nicht über Eclipse sondern direkt
über die Console mit g++ baue? Vielleicht krieg ich da mehr Informationen zum Fehler.
-
lagalopex hat doch ein funktionierendes Beispiel gezeigt.
Zeig doch mal sonst lauffähiges komplettes Programm, der den selben Fehler erzeugt.
-
Ich hab das Beispiel hier auf Arbeit auch mal mit dem gcc gebaut. Hier funzt es.
Ich hab es vermutlich zu weit reduziert. Wenn ich zu Hause bin kümmer ich mich da nochmal drum.
-
Hab es hinbekommen.
Das Problem war eine undefined Reference weil die "InitIndicator"-Funktion der Basisklasse ( "Cindicator" ) nicht implementiert war. Ich hab sie dann von virtuell auf "rein virtuell" erweitert und jetzt funzt es.Warum Eclipse mir die "undefined reference" nicht direkt aufs Auge gedrückt hat, weiß ich leider auch nicht...