저는 기본 클래스와 파생 클래스가 있습니다. 각 클래스에는 .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)
}
:
시간 파일 :
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입니다. BTW,이 플랫폼에서만이 동작을 볼 수 있으며 동일한 코드가 Visual Studio에서 잘 작동합니다.
어쩌면 GCC 3.1 버그의와 잘 작동? "-fdump-class-hierarchy"옵션을 시도해보고 두 클래스에 대한 vtable을 생성하는지 확인하십시오. –