尝试使用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不是多态的。 你应该添加一个virtualfunction。 例如, 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 }