6 Stimmen

dynamic_cast schlägt fehl

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.

0voto

In dem Code, den Sie gepostet haben, ist Derived nicht von Base abgeleitet.

Bearbeiten: FYI, modifizierten Code funktioniert gut mit g++ 3.4.5

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X