Ho una classe base e una classe derivata. Ogni classe ha un file .h e un file .cpp.dynamic_cast failed
sto facendo dynamic_cast dell'oggetto classe base alla classe derivata nel codice seguente:
h file:
class Base
{
public:
Base();
virtual ~Base();
};
class Derived : public Base
{
public:
Derived(){};
void foo();
};
class Another
{
public:
Another(){};
void bar(Base* pointerToBaseObject);
};
file CPP:
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)
}
da qualche strana ragione , la trasmissione non riesce (restituisce NULL). Tuttavia, il casting ha esito positivo se sposto l'implementazione del costruttore della classe Derived da .h al file .cpp.
Cosa può causare?
Il compilatore è gcc 3.1, su Linux-SUSE. A proposito, vedo questo comportamento solo su questa piattaforma e lo stesso codice funziona bene in Visual Studio.
forse è un bug con gcc 3.1? prova l'opzione "-fdump-class-hierarchy" e controlla se crea un vtable per le tue due classi –