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)
^
我正在尝试了解 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)
^