"...undefined reference to `vtable for ... " - wo liegt der Fehler...
-
Hi
hab ein Problem bei meinem Programm. Seit ich mit Hilfe eines "verschachtelten" Vectors ein dynamisches 2D-Array in eine Klasse eingebaut habe, kommt der Fehler
fx_explosion.o(.text+0x1f): In function `FX_Explosion::FX_Explosion[not-in-charge](int, int, unsigned)': /usr/include/c++/3.2.2/bits/stl_algobase.h:427: undefined reference to `vtable for FX_Explosion' fx_explosion.o(.text+0x4d): In function `FX_Explosion::FX_Explosion[in-charge](int, int, unsigned)': /usr/include/c++/3.2.2/bits/stl_vector.h:894: undefined reference to `vtable for FX_Explosion' collect2: ld returned 1 exit status
(GCC 3.2.2)
Hier ein kleiner Auszug aus dem Code:
- Die Basisklasse, in der der Vector steckt:
class FX_Base { public: FX_Base(int x, int y); virtual ~FX_Base(); virtual void draw(SDL_Surface* surface) = 0; protected: int m_CoorX; int m_CoorY; vector< vector<SinglePixel> > layers; };
und in einer davon abgeleiteten Klasse, FX_Explosion, tritt dann der Fehler auf...
Wem's hilft, hier der Ctor von FX_Explosion, in dem ja anscheinend der Fehler liegt:
FX_Explosion::FX_Explosion(int center_x, int center_y, Uint32 color) : FX_Base(center_x, center_y), m_color(color) { add_new_pixel_layer(1000000); // add lotsa' pixel in the first wave }
-
Schau mal hier:
Wegen Konstruktor cpp-File anlegen?Dort habe ich etwas dazu geschrieben.
-
hmm... sowohl FX_Base als auch FX_Explosion haben eine .cpp-Datei, wobei die von FX_Base nur aus dem Ctor mit Initialisierungsliste besteht....
hab auch die alten .o - Dateien geloescht, damit die auch sicher neu erstellt werden, hat aber auch nix gebracht.
-
wobei die von FX_Base nur aus dem Ctor mit Initialisierungsliste besteht....
Das ist aber doch genau der springende Punkt. Versuch mal in die cpp-Dateien eine *Implementation* mindestens einer virtuellen Methode zu packen. Damit sollte sich dein Problem erledigen.
-
so, jetzt ist der Dtor der Basisklasse auch in der .cpp - Datei, kommt aber immer noch die gleiche Fehlermeldung
Liegt das vielleicht daran dass der Dtor absolut leer ist?
FX_Base::~FX_Base() { }
ansonsten hab ich keine virtuellen Funktionen mehr, ausser draw(), aber es macht keinen Sinn, die Methode zu implementieren....
EDIT: auch wenn der Dtor Code enthaelt, bekomm ich noch die selben Fehler:
FX_Base::~FX_Base() { for (unsigned int i = 0; i < layers.size(); ++i) { layers[i].clear(); } layers.clear(); }
[ Dieser Beitrag wurde am 16.06.2003 um 14:09 Uhr von Blue-Tiger editiert. ]
-
Hallo,
also irgendwie kann ich dir nicht folgen. Da steht doch, dass er die vtable der Klasse FX_Explosion nicht finden kann. Warum konzentrierst du dich dann auf die Basisklasse FX_Base ?Hast du auch für die Klasse FX_Explosion eine *Definition* einer *virtuellen* Methode in einer cpp-Datei?