Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 向量<;类别>;“没有成员”;功能“;_C++ - Fatal编程技术网

C++ 向量<;类别>;“没有成员”;功能“;

C++ 向量<;类别>;“没有成员”;功能“;,c++,C++,我有两个类(Vector3在这里是一个不相关的类): 如果我想将Room()定义为: Room::Room() { roombuttons[0].SetPos(100,100,0); } 我得到一个错误,说类“std::vector”没有成员“SetPos” 为什么我不能在向量中的按钮实例上调用按钮类的SetPos函数 我希望有一个房间实例,其中包含存储在某种数组中的两个按钮,这样我就可以像使用数组的元素一样使用它们。就这样做吧 vector<Button> roombutt

我有两个类(Vector3在这里是一个不相关的类):

如果我想将
Room()
定义为:

Room::Room() { 
  roombuttons[0].SetPos(100,100,0);
}
我得到一个错误,说
类“std::vector”没有成员“SetPos”
为什么我不能在向量中的按钮实例上调用按钮类的
SetPos
函数

我希望有一个房间实例,其中包含存储在某种数组中的两个按钮,这样我就可以像使用数组的元素一样使用它们。

就这样做吧

vector<Button> roombuttons;
vector按钮;
而不是

vector<Button> roombuttons[3];
矢量房间按钮[3];

问题在于,您将
房间按钮
声明为
向量
对象的数组,因此
房间按钮[0]
正在访问第一个
向量
,而不是第一个
按钮
。因此错误是正确的,
vector
没有名为
SetPos()
的方法。您需要更像这样的东西:

roombuttons[0][0].SetPos(100,100,0);
但这不是你真正想要的。您需要一个
按钮的数组,因此

  • 将数组改为单个
    向量
    ,然后将其填充到构造函数中:

    class Room {
      public:
        Room();
    
      private:
        vector<Button> roombuttons;
    };
    
    Room::Room() : roombuttons(3) { 
      roombuttons[0].SetPos(100,100,0);
      ...
    }
    

如果您想要固定大小,请使用
std::array roombuttons。现在您正在声明一个由三个向量组成的数组。不是一个大小为3的向量。
向量空间按钮[3]-是否确实要创建按钮向量数组?您可能需要
矢量房间按钮(3)
roombuttons[0]
是一个
向量
,而不是
按钮
。它没有名为
SetPos
@Fl.pf的成员函数。然后,您需要去掉
roombuttons
声明中的
[3]
。您需要的是单个向量的按钮,而不是向量数组。@NathanOliver请注意
vector roombuttons=vector(3)只能在C++11及更高版本中工作。对于早期版本,只需声明
vector roombuttons,然后在构造函数的成员初始化列表中使用
roombuttons(3)
,或者
roombuttons=vector(3)在构造函数的主体中。在您可以通过索引访问其中任何一个按钮之前,不要忘记将实际的
按钮
对象添加到
房间按钮
,最好分配一些对象,否则这将在第一次
操作符[]
访问时调用未定义的行为。OP总是可以
按钮室按钮[3]
如果大小确实是固定的,那就称之为好。@WhozCraig大小对于所有房间都是固定的,我不知道这么简单,谢谢。或者
std::array roombuttons
roombuttons[0][0].SetPos(100,100,0);
class Room {
  public:
    Room();

  private:
    vector<Button> roombuttons;
};

Room::Room() : roombuttons(3) { 
  roombuttons[0].SetPos(100,100,0);
  ...
}
class Room {
  public:
    Room();

  private:
    Button roombuttons[3];
};

Room::Room() { 
  roombuttons[0].SetPos(100,100,0);
  ...
}