在一个类中向向量添加元素不适用于其他类
Adding elements to vector in one class doesn't apply to other classes
问题是,当我使用 push_back
将元素添加到一个类中的向量时,然后当我尝试从另一个类访问该向量时,更改尚未保存。没有从另一个类添加到向量中,但是从我添加的类中,没有任何问题地添加了它。
我尝试过使用引用和指针,但由于我对C++相当陌生,因此我一直无法弄清楚。尝试将&
和*
放在变量,函数之类的东西之前,但没有任何效果。
手.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,并且更改不应用于其他类。
您正在处理两个不同的Hand
实例,这就是它不起作用的原因。Dealer::DealCard
中的 Hand
对象与 Game::Initialize
中的对象不同。
像这样的更改应该可以解决您的问题,但是您必须小心使用原始指针。
class Dealer {
public:
Dealer() : m_hand(new Hand) {}
~Dealer() { delete m_hand; }
void DealCard(int cards) {
for (int i = 0; i < cards; i++) {
Card card(SelectRandomElement(cardSuits, 4), SelectRandomElement(cardValues, 12));
std::vector<Card>& dealerCards = m_hand.GetDealerCards();
dealerCards.push_back(card);
}
}
Hand* getHand() { return m_hand; }
private:
Hand* m_hand;
}
void Game::Initialize() {
Dealer dealer;
dealer.DealCard(1);
Hand* hand = dealer.getHand();
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;
}
}
编辑:如果你愿意,你甚至可以像这样没有Hand
类:
class Dealer {
public:
Dealer() {}
void DealCard(int cards) {
for (int i = 0; i < cards; i++) {
m_cards.emplace_back(SelectRandomElement(cardSuits, 4), SelectRandomElement(cardValues, 12));
}
}
std::vector<Card> getCards() { return m_cards; }
private:
std::vector<Card> m_cards;
}
void Game::Initialize() {
Dealer dealer;
dealer.DealCard(1);
std::vector<Card> dealerCards = dealer->getCards();
std::cout << dealerCards.size() << std::endl;
for (int i = 0; i < dealerCards.size(); i++) {
std::cout << dealerCards.size() << std::endl;
}
}
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;
}
注意:我强烈建议您通过设置方法更改经销商卡的值,而不是通过引用并更改它。如果您的代码增长,则很难跟踪该属性的更改位置。
相关文章:
- 添加存储在向量中的大整数的函数出现问题
- 不允许在向量中添加更多元素
- 如何将元素添加到向量的字符串位置
- 有没有办法向这个向量添加元素?
- 这种方式是否可以接受向向量添加unique_ptr?
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- C++ 将子类的对象添加到父类的向量中
- 如何在提升间进程中构建具有给定计数的向量并向其添加元素
- 将不同类型的变量添加到向量中
- 将树节点添加到向量向量中的 n 元树遍历的平均和最坏情况时间复杂度是多少?
- 使用 std::transform 将向量向量 (a) 添加到另一个向量向量 (b)
- 继承层次结构并将元素添加到向量
- 测试驱动开发 c++:如何将对象添加到向量中,将歌曲添加到播放列表并对其进行测试
- 如何将对象添加到类中的静态向量
- 对象如何将自身添加到对象类中的向量中?
- 为什么我们需要在优先级队列声明中添加一个向量作为参数?
- C++ 如何在向量中添加向量?vector.push_back( 向量<> )?
- 如何在CUDA内核中添加向量元素
- 向 NS2 添加向量;编译器错误
- 向向量添加向量