基本クラスと派生クラスがあります。各クラスには、.h ファイルと .cpp ファイルがあります。
次のコードで、基本クラス オブジェクトの派生クラスへの 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 を返します)。ただし、派生クラスのコンストラクターの実装を .h から .cpp ファイルに移動すると、キャストは成功します。
何が原因ですか?
Linux-SUSE のコンパイラは gcc 3.1 です。ところで、この動作はこのプラットフォームでのみ見られ、同じコードは Visual Studio でも正常に動作します。