更改向量中对象的私有变量

Changing private variable of object in a vector

本文关键字:变量 对象 向量      更新时间:2023-10-16

我正在尝试更改下面显示的卡类中INT变量的值:

class Card {
  public:
    enum Suits {diamond, heart, club, spade};
    Card (int _rank, Suits _suit) : rank{_rank}, suit{_suit} {}
    int getRank();
    void changeRank(int change);
  private:
    int rank;
    Suits suit;
};

card.cpp:

int Card::getRank() {
  return rank;
}
void Card::changeRank(int change) {
    rank = change;
}

这是玩家类:

class Player {
  private:
    vector<Card> playerHand;
  public:
    Card getCard(int index);
};

player.cpp:

Card Player::getCard(int index) {
    return playerHand[index];
}

这是经销商.cpp文件,实际上是致电的文件:

if (oneOrEleven == 11) {
    player.getCard(i).changeRank(11);
    cout << "The ace will have a value of 11" << endl;
}

此代码正在调用方法" changerank((",它只是不会更改卡对象中的"等级"的值。

我在做什么错?

您应该将 Player::getCard从返回返回变为返回。例如

Card& Player::getCard(int index) {
    return playerHand[index];
}

ohterwise,您将始终在返回的副本上进行修改,这与向量中的原始元素无关。

此代码正在调用方法" changerank((",它只是没有更改 卡对象中"等级"的值。

通过参考将getCard的函数声明更改为,即:

Card& getCard(int index);

您立即获得函数声明的方式,它正在返回卡对象 bial value ,而不是引用。

当您按值返回时,您将返回对象的副本,而不是实际对象本身。