我有2类:hObject,抽屉。抽屉继承自hObject。
使用此代码,我通过id检索特定对象:
hObject * foundObj = hManager::getInstance()->getObject("drawer_id");
现在我想正确地将foundObj从hObject强制转换为Drawer。与:
vector<int> points = ((DrawerWidget *)hObject)->getPoints();
我复习
预期在“)”令牌之前的主要表达式
动态演员呢?
考虑:在我开始使用C ++之前,我的技能已减半
最佳答案
两个问题:
您写hObject
(类型名称)是指foundObj
(对象名称)
它是一个指针,因此您需要转换为指针类型(更新:该问题已被编辑以解决此问题)。
要解决此问题,并使用危险性较小的C ++样式的强制转换,应能进行以下操作:
vector<int> points = (static_cast<DrawerWidget*>(foundObj))->getPoints();
动态演员呢?
如果基类是多态的(也就是说,至少具有一个虚函数),那将更加安全-您可以在运行时检查强制转换是否有效:
if (DrawerWidget * dw = dynamic_cast<DrawerWidget*>(foundObj)) {
vector<int> points = dw->getPoints();
} else {
// not a DrawerWidget
}
尽管如果您这样做,我会考虑一下设计:重新设计基类以通过虚拟函数支持您要执行的操作,或者在编译时确保转换有效,可能更合适。