Tengo una clase base y una clase derivada. Cada clase tiene un archivo .h y un archivo .cpp.dynamic_cast failed
que estoy haciendo moldeado dinámico del objeto de la clase base para la clase derivada en el siguiente código:
archivos h:
class Base
{
public:
Base();
virtual ~Base();
};
class Derived : public Base
{
public:
Derived(){};
void foo();
};
class Another
{
public:
Another(){};
void bar(Base* pointerToBaseObject);
};
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)
}
de alguna extraña razón , el lanzamiento falla (devuelve NULL). Sin embargo, la conversión tiene éxito si muevo la implementación del constructor de la clase Derivada de .h al archivo .cpp.
¿Qué puede causarlo?
El compilador es gcc 3.1, en Linux-SUSE. Por cierto, veo este comportamiento solo en esta plataforma, y el mismo código funciona bien en Visual Studio.
tal vez es un error con gcc 3.1? prueba la opción "-fdump-class-hierarchy" y mira si crea un vtable para tus dos clases –