尝试使用dynamic_cast时获取“源types不是多态”
struct A {}; struct B : A {}; int main() { A* a = new B(); B* b = dynamic_cast<B*>(a); }
得到:
不能dynamic_cast'a'(types'struct A *')键入'struct B *'(源types不是多态)
我怎样才能使多态? 我想把它安全地扔到B.
(一种方法是添加虚拟虚拟function,但有没有更好的方法?)
你需要做A
多态的,你可以通过添加一个virtual
析构函数或任何虚函数来实现:
struct A { virtual ~A() {} };
请注意,多态types应该有一个虚拟析构函数,如果你打算安全地通过指向基类的指针派生types的实例调用删除。
你至less需要一个virtual
函数 – 通常,如果没有其他合适的话,析构函数:
struct A { virtual ~A() {} };
正如你的编译器所说的,你的typesA
不是多态的。 你应该添加一个virtual
function。 例如, virtual
析构函数可能是一个不错的select :
struct A { virtual ~A() { } }; // ^^^^^^^ This makes A a polymorphic type struct B : A {}; int main() { A* a = new B(); B* b = dynamic_cast<B*>(a); // Should work now }