我无法通过指向对象的数组来确定如何访问bject方法。
我有一个Environment类的 env 对象:
Environment env;
我的环境有一些对象指针以及一个动态的指针数组:
static Robot *robot;
static Obstacle *obstacle;
static Object **objects;
所以在对象里面我可以有机器人和障碍物:
但是现在当我想访问对象数组中的对象方法时,我该怎么做?我试过了
Environment env;
Robot *robot;
robot = env.objects[0];
robot->setSpeed(175);
但它没有用。我收到了一个错误:
error: invalid conversion from ‘Object*’ to ‘Robot*’
我做错了什么?
PS:机器人继承自Object。
提前谢谢!
答案 0 :(得分:4)
由于Robot
继承自Object
,您必须使用static_cast
或dynamic_cast
来投射指针:
robot = static_cast<Robot*>(Environment::objects[0]);
作为旁注,我还建议您使用std::vector
代替数组,使用智能指针std::shared_ptr
而不是原始指针。
答案 1 :(得分:2)
您需要将Object *转换为Robot *。假设Robot继承自Object。我建议你使用dynamic_cast:
Robot* robot = dynamic_cast<Robot*>(env.objects[0]);
if (robot != NULL) {
robot->setSpeed(14);
}
答案 2 :(得分:1)
您应该将对象从Object *转换为Robot *。但是,您必须确保它是Robot对象,否则您的应用程序将崩溃。
以下是一个例子:
#include <iostream>
class Object
{
};
class Robot : public Object
{
public:
int speed;
void setSpeed(int newSpeed){ speed = newSpeed; }
};
int main()
{
Object* obj = new Robot();
((Robot*)obj)->setSpeed(4);
std::cout << "Speed is: " << ((Robot*)obj)->speed << std::endl;
}
答案 3 :(得分:1)
您不能隐式地将基类的指针指定给派生类的指针。如果您需要这样做,请使用dynamic_cast
。
答案 4 :(得分:1)
objects ,这意味着objects [0]的类型为Object *。您无法将对象*分配给Robot *。假设Robot是一个派生自Object的类,至少有一个虚拟成员函数,你可以做
robot = dynamic_cast<Robot*>(object[0]);
如果object [0]碰巧不是Robot,则执行转换或将 robot 设置为空指针值。如果你确定它是一个机器人,你可以改用static_cast()。
答案 5 :(得分:0)
你的对象似乎不是Robot *或指向它的子类的指针。