私は基本クラスと派生クラスを持っています。各クラスには.hファイルと.cppファイルがあります。dynamic_castは失敗します
私は、次のコードでは、派生クラスに基底クラスのオブジェクトのはdynamic_castをしています:いくつかの奇妙な理由から
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)
}
:
Hファイル:
class Base
{
public:
Base();
virtual ~Base();
};
class Derived : public Base
{
public:
Derived(){};
void foo();
};
class Another
{
public:
Another(){};
void bar(Base* pointerToBaseObject);
};
のcppファイル、キャストは失敗します(NULLを返します)。しかし、派生クラスのコンストラクタの実装を.hから.cppファイルに移すと、キャストは成功します。
何が原因なのですか?
コンパイラはLinux-SUSEのgcc 3.1です。ところで、私はこのプラットフォームでのみこの動作を参照し、同じコードはVisual Studioで正常に動作します。
多分それはgccの3.1のバグだと正常に動作しますか? "-fdump-class-hierarchy"オプションを試して、2つのクラスのvtableを作成するかどうかを確認してください。 –