J'ai une classe de base et une classe dérivée. Chaque classe a un fichier .h et un fichier .cpp.dynamic_cast échoue
que je fais dynamic_cast de l'objet de classe de base à la classe dérivée dans le code suivant:
fichiers h:
class Base
{
public:
Base();
virtual ~Base();
};
class Derived : public Base
{
public:
Derived(){};
void foo();
};
class Another
{
public:
Another(){};
void bar(Base* pointerToBaseObject);
};
fichiers 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 quelque raison étrange , la diffusion échoue (renvoie NULL). Cependant, la conversion réussit si je déplace l'implémentation du constructeur de la classe Derived de .h vers le fichier .cpp.
Quelle est la cause?
Le compilateur est gcc 3.1, sous Linux-SUSE. BTW, je vois ce comportement uniquement sur cette plate-forme, et le même code fonctionne très bien dans Visual Studio.
peut-être est un bug avec gcc 3.1? essayez l'option "-fdump-class-hierarchy" et regardez si elle crée un vtable pour vos deux classes –