dynamic_cast 导致 bad_cast 错误

dynamic_cast causing a bad_cast error

我正在尝试了解 dynamic_cast 的工作原理。我有一个 class interfaceElement 和一个从它派生的 class 菜单。在我的程序中,我没有创建 class interfaceElement 的对象。执行以下代码时(更准确的说是执行dynamic_cast这一行),抛出bad_cast异常

void drawInterfaceElement(interfaceElement elem, int colour1, int colour2)
{
    if (elem.getType()=="MENU")
    {
        menu &cur = dynamic_cast<menu&>(elem);
        this->drawMenu(&cur,colour1,colour2);
    }
}

为什么?

参考interfaceElement。当前,您通过按值获取进行切片,导致 menu 子对象丢失。 dynamic_cast 无法转换为该类型,导致抛出 std::bad_cast(如果您正在转换为指针,将返回空指针)。

What is object slicing?

问题是您按值传递 elem。所以它是一个 interfaceElement 对象,不能是派生类型的大小写。

您需要通过引用传递:

void drawInterfaceElement(interfaceElement& elem, int colour1, int colour2)
                                          ^