Ich habe eine Basisklasse und eine abgeleitete Klasse. Jede Klasse hat eine .h-Datei und eine .cpp-Datei.
Ich tue dynamic_cast der Basisklasse Objekt an die abgeleitete Klasse im folgenden Code:
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 schlägt das Casting fehl (gibt NULL zurück). Das Casting ist jedoch erfolgreich, wenn ich die Implementierung des Konstruktors der Klasse Derived von der Datei .h in die Datei .cpp verschiebe.
Was kann sie verursachen?
Der Compiler ist gcc 3.1, auf Linux-SUSE. BTW, ich sehe dieses Verhalten nur auf dieser Plattform, und der gleiche Code funktioniert gut in Visual Studio.