Ich habe eine Basisklasse und eine abgeleitete Klasse. Jede Klasse hat eine .h-Datei und eine .cpp-Datei.dynamic_cast schlägt fehl
I dynamic_cast der Basisklasse Objekt der abgeleiteten Klasse in dem folgenden Code tue:
h Dateien:
class Base
{
public:
Base();
virtual ~Base();
};
class Derived : public Base
{
public:
Derived(){};
void foo();
};
class Another
{
public:
Another(){};
void bar(Base* pointerToBaseObject);
};
cpp Dateien:
Base::Base()
{
//do something....
}
Base::~Base()
{
//do something....
}
void Derived::foo()
{
Another a;
a.bar(this);
}
void Another::bar(Base* pointerToBaseObject)
{
dynamic_cast<Derived*>(pointerToBaseObject)
}
Aus irgendeinem seltsamen Grund , das Casting schlägt fehl (gibt NULL zurück). Das Casting ist jedoch erfolgreich, wenn ich die Implementierung des Konstruktors der Derived-Klasse von .h in die .cpp-Datei verschiebe.
Was kann das verursachen?
Der Compiler ist gcc 3.1, auf Linux-SUSE. Übrigens, ich sehe dieses Verhalten nur auf dieser Plattform, und derselbe Code funktioniert in Visual Studio einwandfrei.
vielleicht ist es ein Fehler mit gcc 3.1? Versuchen Sie "-fdump-class-hierarchy" -Option und schauen, ob es eine vtable für Ihre zwei Klassen erstellt –