我有一個基類和一個派生類。每個類都有一個.h文件和一個.cpp文件。dynamic_cast失敗
,我在下面的代碼做dynamic_cast的基類對象的派生類:
.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」選項,看看它是否爲你的兩個類創建了一個虛擬表格。 – 2009-02-26 15:37:42