У меня есть базовый класс и производный класс. Каждый класс имеет файл .h и файл .cpp.dynamic_cast failed
Я делаю dynamic_cast объекта базового класса в производном классе в следующем коде:
ч файлы:
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. BTW, я вижу это поведение только на этой платформе, и тот же код отлично работает в Visual Studio.
Может быть, это ошибка с GCC 3.1 работает? попробуйте параметр «-fdump-class-hierarchy» и посмотрите, создает ли он vtable для ваших двух классов. –