获取“源类型不是多态的”当尝试使用dynamic_cast时 [英] Getting "source type is not polymorphic" when trying to use dynamic_cast

查看:700
本文介绍了获取“源类型不是多态的”当尝试使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆