vector <class>没有成员“函数”

时间:2019-01-07 21:18:32

标签: c++

我有两个类(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,它们存储在某种数组中,以便可以像数组元素一样使用它们。

2 个答案:

答案 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];