У меня есть базовый класс и производный класс. У каждого класса есть файл .h и файл .cpp.
Я делаю 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). Однако приведение будет успешным, если я перенесу реализацию конструктора производного класса из .h в файл .cpp.
Что может быть причиной?
Компилятор gcc 3.1 на Linux-SUSE. Кстати, я вижу такое поведение только на этой платформе, и тот же код отлично работает в Visual Studio.