我有一个基类和一个派生类。每个类都有一个 .h 文件和一个 .cpp 文件。
我正在以下代码中将基类对象动态转换为派生类:
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)
}
由于某种奇怪的原因,转换失败(返回 NULL)。但是,如果我将 Derived 类的构造函数的实现从 .h 移动到 .cpp 文件,则转换成功。
什么会导致它?
编译器是 gcc 3.1,在 Linux-SUSE 上。顺便说一句,我只在这个平台上看到这种行为,并且相同的代码在 Visual Studio 中运行良好。