У меня следующая классовая архитектура:
class A{
public:
A() {}
virtual ~A() {}
void printA() { cout << "A" << endl; }
};
class B{
public:
B() {}
virtual ~B() {}
void printB() { cout << "B" << endl; }
};
class C : public A{
public:
C() : A() {}
virtual ~C() {}
void printC() { cout << "C" << endl; }
};
class D : public B{
public:
D() : B() {}
virtual ~D() {}
void printD() { cout << "D" << endl; }
};
class P: public C, public D{
public:
P() : C(), D() {}
~P() {}
void printP() { cout << "P" << endl; }
};
Проблема в том, что в Visual Studio некоторые преобразования не выполняются, но в онлайн-компиляторе все работает нормально. Я лучше объясню проблему в коде:
A* pObject= new P(); // let s say I have this instance of type P referenced by an A type pointer
dynamic_cast<P*>(pObject)->printP(); // works fine in both VS and online compiler, as expected
dynamic_cast<D*>(pObject)->printD(); // THIS IS THE PROBLEM, in Visual Studio cast returns nullptr, but in online compiler works fine.
return 0;
}
Знаете ли вы какое-либо решение / причину такого поведения? Спасибо.