我有两个类(Vector3在这里是不相关的类):
class Room {
public:
Room();
private:
vector<Button> roombuttons[3];
};
和
class Button {
public:
Button();
Button(Vector3 pos);
void SetPos(Vector3 pos);
private:
Vector3 pos;
}
如果我想将Room()
定义为:
Room::Room() {
roombuttons[0].SetPos(100,100,0);
}
我收到一条错误消息,说class "std::vector<Button, std::allocator<Button>>" has no member "SetPos"
为什么我不能在向量中的Button实例上调用Button类的SetPos
函数?
我希望有一个Room实例,其中包含几个Button,它们存储在某种数组中,以便可以像数组元素一样使用它们。
答案 0 :(得分:2)
问题是您将roombuttons
声明为vector
对象的数组,因此roombuttons[0]
正在访问第一个vector
,而不是第一个Button
。因此错误是正确的,vector
没有名为SetPos()
的方法。您将需要以下类似的东西:
roombuttons[0][0].SetPos(100,100,0);
但这不是您真正要的。您需要一个Button
的数组,所以
改为将您的数组更改为单个vector
,然后将其填充到构造函数中:
class Room {
public:
Room();
private:
vector<Button> roombuttons;
};
Room::Room() : roombuttons(3) {
roombuttons[0].SetPos(100,100,0);
...
}
,或者,摆脱vector
,因为您预先知道要多少Button
:
class Room {
public:
Room();
private:
Button roombuttons[3];
};
Room::Room() {
roombuttons[0].SetPos(100,100,0);
...
}
答案 1 :(得分:0)
只要做
vector<Button> roombuttons;
代替
vector<Button> roombuttons[3];