获取“源类型不是多态的”当尝试使用dynamic_cast时 [英] Getting "source type is not polymorphic" when trying to use dynamic_cast
本文介绍了获取“源类型不是多态的”当尝试使用dynamic_cast时的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
struct A {};
struct B : A {};
int main()
{
A* a = new B();
B* b = dynamic_cast<B*>(a);
}
提供:
无法dynamic_casta(类型为struct A *)键入struct B *源类型不是多态的)
如何使 A
多态性?我想把它安全地转到B。
How can I make A
polymorphic? I want to safely cast it to B.
(一种方法是添加一个虚拟虚拟函数,但有更好的方法吗?)
(One way is to add a dummy virtual function, but is there a better way?)
推荐答案
您需要创建 A
多态,您可以通过添加 virtual
析构函数或任何虚函数:
You need to make A
polymorphic, which you can do by adding a virtual
destructor or any virtual function:
struct A {
virtual ~A() {}
};
注意,多态类型应该有一个虚拟析构函数,如果你打算安全地调用delete的派生类型的指针。
Note that a polymorphic type should have a virtual destructor anyway, if you intend to safely call delete on instances of a derived type via a pointer to the base.
这篇关于获取“源类型不是多态的”当尝试使用dynamic_cast时的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文