更改向量中对象的私有变量
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 对象的副本,而不是实际对象本身。
我正在尝试更改 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 对象的副本,而不是实际对象本身。