【发布时间】:2009-02-26 12:30:20
【问题描述】:
我有一个基类和一个派生类。每个类都有一个 .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 中运行良好。
【问题讨论】:
-
可能是 gcc 3.1 的错误?尝试“-fdump-class-hierarchy”选项,看看它是否为你的两个类创建了一个 vtable
标签: c++ dynamic-cast