我有一个作业,我有一个'机器人' - 我有一个对象。我有另一个名为QuickLimitedRobot的Object,它继承自Robot但又有一个字段 - limit,这是一个整数。
我有一个包含所有机器人的向量,无论它们是有限的还是机器人对象的其他继承类型,我需要在我已经知道的向量节点中找到我的代码上的getLimit()函数这是一个QuickLimitedRobot。
void RobotDB::moveLimitedRobot(const int rNum, const std::string &rDirection){
int cellValue;
int locX=robots[rNum]->getCoordinate().getX();
int locY=robots[rNum]->getCoordinate().getY();
//@todo: :(
QuickLimitedRobot tempQuick=*robots[rNum];
int rLim=tempQuick.getLimit();
我的编译器不能编译它,因为我试图将Robot转换为非标量类型' QuickLimitedRobot。
有人可以请我找个解决方案吗?
提前thx!答案 0 :(得分:1)
您可以使用dynamic_cast
。这看起来像:
QuickLimitedRobot* tempQuick = dynamic_cast<QuickLimitedRobot*>(robots[rNum]);
if (tempQuick) {
int rLim = tempQuick->getLimit();
或者既然你说你已经知道它是QuickLimitedRobot
,你可以通过引用进行投射。如果你弄错了,它会抛出异常。
QuickLimitedRobot& tempQuick = dynamic_cast<QuickLimitedRobot&>(*robots[rNum]);
int rLim = tempQuick.getLimit();
或者,如果您真的100%绝对确定它是QuickLimitedRobot
,并且继承不是虚拟的,您甚至可以尝试static_cast
。这次如果你弄错了,使用结果引用是未定义的行为 - 如果你很幸运就会崩溃。
QuickLimitedRobot& tempQuick = static_cast<QuickLimitedRobot&>(*robots[rNum]);
int rLim = tempQuick.getLimit();