0

我现在正在做一个项目,我对如何处理这个问题感到困惑。

class Unit: public Entity {
   string Name;
   int HP;
   int MP;
   int Agi;
   int Spr;
   int Def;
   int Atk;
   int Lvl;
   int Exp;
   std::vector<int> states;
   string unitType;
   public:
      int GetHP() {return HP};
      int GetMP() {return MP};
      int GetAgi() {return Agi};
      int GetSpr() {return Spr};
      int GetDef() {return Def};
      int GetAtk() {return Atk};
      int GetLvl() {return Lvl};
      int GetExp() {return Exp};
      std::vector<int>& GetStates() {return &states};
      string GetUnitType() {return unitType};
      virtual void SetHP(int newValue);
      virtual void SetMP(int newValue);
      virtual void SetAgi(int newValue);
      virtual void SetSpr(int newValue);
      virtual void SetDef(int newValue);
      virtual void SetAtk(int newValue);
      virtual void SetLvl(int newValue);
      virtual void SetExp(int newValue);

我需要返回对“std::vector states”的引用,以便可以遍历它并查找值。我相信我应该使用 Set 因为我只有一个值并且不能重复,但我会保存它以备后用。“std::vector& GetStates() {return &states}”是否正确?应该将其更改为“std::vector& const GetStates() {return &states}”还是我完全关闭了?我在这里看到了与此类似的帖子,但它没有具体回答我的问题,因为他们没有以与此相同的借口使用它。

4

2 回答 2

1

如果states是a std::vector<int>,那么&states是a std::vector<int>*,不是a std::vector<int>&

是否返回引用由函数签名中提供的返回类型决定,而不是由return实现中的语句决定。做吧return states

于 2013-06-23T02:54:50.697 回答
0

“std::vector& GetStates() {return &states}”是否正确?

不,有语法错误。

std::vector<int>& GetStates(){
    return states;
}

是正确的。

是否应该改为

这由你决定。如果您返回非常量引用,那么无论谁请求向量,都可以更改它。如果您返回 const 引用,则将方法声明为

const std::vector<int>& GetStates() const{
    return states;
}

第二个 const 表示当你调用这个函数时,对象的内部状态不会改变。

于 2013-06-23T03:02:31.633 回答