c++ - 在一个类中向向量添加元素不适用于其他类
问题描述
问题是,当我将元素添加push_back
到一个类中的向量时,然后当我尝试从另一个类访问该向量时,尚未保存更改。没有元素从其他类添加到向量中,但是从我添加的类中添加它没有任何问题。
我已经尝试过使用引用和指针,但是由于我对 C++ 还很陌生,所以我无法弄清楚。尝试将&
's 和*
's 放在变量、函数之类的东西之前,但没有任何效果。
手.h
class Hand {
public:
std::vector<Card>& GetDealerCards();
};
手.cpp
std::vector<Card>& Hand::GetDealerCards() {
return this->dealerCards;
}
游戏.cpp
void Game::Initialize() {
Dealer dealer;
dealer.DealCard(1);
Hand hand;
std::vector<Card> dealerCards = hand.GetDealerCards();
std::cout << dealerCards.size() << std::endl;
for (int i = 0; i < dealerCards.size(); i++) {
std::cout << dealerCards.size() << std::endl;
}
}
int main() {
Game game;
game.Initialize();
return 0;
}
经销商.cpp
void Dealer::DealCard(int cards) {
Hand hand;
for (int i = 0; i < cards; i++) {
Card card(SelectRandomElement(cardSuits, 4), SelectRandomElement(cardValues, 12));
std::vector<Card>& dealerCards = hand.GetDealerCards();
dealerCards.push_back(card);
}
}
在Game
我打印出向量中有多少元素的类中dealerCards
,但它仍然打印 0,并且这些更改不适用于其他类。
解决方案
Dealer dealer;
dealer.DealCard(1);
Hand hand; //hand you are interested in
std::vector<Card> dealerCards = hand.GetDealerCards();
std::cout << dealerCards.size() << std::endl;
看看代码的这个顺序:你在它的方法 DealCard 中创建了一个 Dealer 类,你正在创建一个与 . 没有任何关系的手对象hand you are interested in
。
也许将手作为参数传递或将其设为属性,我会为您写一个快速修复,但这取决于您的设计,您应该编写自己的版本。
void Dealer::DealCard(int cards, Hand& hand) {
for (int i = 0; i < cards; i++) {
Card card(SelectRandomElement(cardSuits, 4), SelectRandomElement(cardValues, 12));
std::vector<Card>& dealerCards = hand.GetDealerCards();
dealerCards.push_back(card);
}
}
void Game::Initialize() {
Hand hand;
Dealer dealer;
dealer.DealCard(1,hand);
std::vector<Card> dealerCards = hand.GetDealerCards();
std::cout << dealerCards.size() << std::endl;
for (int i = 0; i < dealerCards.size(); i++) {
std::cout << dealerCards.size() << std::endl;
}
}
int main() {
Game game;
game.Initialize();
return 0;
}
注意:我强烈建议您通过set方法更改经销商卡的值,而不是通过引用获取并更改它。如果您的代码增长,将很难跟踪该属性的更改位置。
推荐阅读
- mysql - 嵌套选择时 where 子句中的未知列
- beautifulsoup - 为什么一个元素在 Beautiful Soup 中看起来有四个孩子?
- javascript - react native redux中的useSelector中的状态未定义
- vue.js - Vue将数据传回多个级别
- c - 使用 c 的正弦系列
- pine-script - 为什么我在 Pine 中的代码显示奇怪的结果?
- reactjs - How to continue a video between Screens with StackNavigation in React Native?
- edit - 如何将符号单独的尾随移动到 COBOL 中的普通十进制字段
- reactjs - 无法在reactjs中安装材料ui
- azure - Azure App Service 应用服务日志 blob 保留不起作用