我正在尝试更改下面显示的Card类中的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;
}
这是Player类:
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”的值。
我做错了什么?
答案 0 :(得分:2)
您应该将Player::getCard
从按值返回更改为按引用返回。 e.g。
Card& Player::getCard(int index) {
return playerHand[index];
}
但是,你总是会修改返回的副本,这与向量中的原始元素无关。
答案 1 :(得分:1)
此代码调用方法&#34; changeRank()&#34;,它只是不改变 &#34; rank&#34;的价值在卡片对象中。
将getCard的函数声明更改为通过引用返回 ,即:
Card& getCard(int index);
现在您的功能声明的方式是,它返回一个Card对象按值,而不是通过引用。
按值返回时,将返回对象的副本,而不是实际的对象本身。