关于c ++:dynamic_cast导致bad_cast错误

dynamic_cast causing a bad_cast error

本问题已经有最佳答案,请猛点这里访问。

我试图理解动态角色扮演是如何工作的。我有一个类接口和一个从它派生的类菜单。在我的程序中,我不创建类InterfaceElement的对象。在执行以下代码时(更精确地说,使用动态u cast执行行),会引发错误的u cast异常

1
2
3
4
5
6
7
8
void drawInterfaceElement(interfaceElement elem, int colour1, int colour2)
{
    if (elem.getType()=="MENU")
    {
        menu &cur = dynamic_cast<menu&>(elem);
        this->drawMenu(&cur,colour1,colour2);
    }
}

为什么?


问题是,您正在按值传递elem。所以它是一个interfaceElement对象,不能是派生类型的情况。

您需要通过引用:

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


interfaceElement为参照。当前,您通过按值获取而招致切片,从而导致menu子对象丢失。dynamic_cast无法强制转换为该类型,导致std::bad_cast被抛出(如果转换为指针,将返回一个空指针)。

看什么是对象切片?