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

Changing private variable of object in a vector

我正在尝试更改 Card class 中的 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:

class Player {
  private:
    vector<Card> playerHand;

  public:
    Card getCard(int index);
};

player.cpp:

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

这是实际进行调用的 dealer.cpp 文件:

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

此代码正在调用方法 "changeRank()",只是没有更改 Card 对象中 "rank" 的值。

我做错了什么?

您应该将 Player::getCard 从 return-by-value 更改为 return-by-reference。例如

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

否则,您将始终修改 returned 副本,这与向量中的原始元素无关。

This code is calling the method "changeRank()", it's just not changing the value of "rank" in the Card object.

将getCard的函数声明改为return引用,即:

Card& getCard(int index);

您现在的函数声明方式是return按值而不是按引用Card 对象。

当您按值 return 时,您是在 return 对象的副本,而不是实际对象本身。