C++ 在公共方法中使用pop_back(),但一旦退出该方法,向量将返回到原始向量
我正在写一个21点程序。我用的是两种不同的职业,甲板和游戏。我将我的洗牌牌牌堆存储在一个向量中,该向量对牌堆类是私有的。我调用一个名为dealCard()的Deck方法,该方法将向量中的最后一个元素分配给玩家,然后从向量中弹出该元素。此方法在游戏方法playRound中调用,该方法按顺序向每位玩家发放2张牌。这个很好用,我给每个经销商买了两张不同的卡。但是,一旦playRound方法退出,向量将返回到原始的全组C++ 在公共方法中使用pop_back(),但一旦退出该方法,向量将返回到原始向量,c++,vector,C++,Vector,我正在写一个21点程序。我用的是两种不同的职业,甲板和游戏。我将我的洗牌牌牌堆存储在一个向量中,该向量对牌堆类是私有的。我调用一个名为dealCard()的Deck方法,该方法将向量中的最后一个元素分配给玩家,然后从向量中弹出该元素。此方法在游戏方法playRound中调用,该方法按顺序向每位玩家发放2张牌。这个很好用,我给每个经销商买了两张不同的卡。但是,一旦playRound方法退出,向量将返回到原始的全组 Card* Decks::dealCard(){ Card* card =
Card* Decks::dealCard(){
Card* card = deckList[deckList.size()-1];
deckList.pop_back();
return card;
}
void Game::dealRound(int playernum, Decks deck){
for (int h = 0; h<playernum; h++){
Card* temp = deck.dealCard();
players[h]->first = temp;
cout<<endl;
deck.printDecks();
}
for (int h = 0; h<playernum; h++){
Card* temp = deck.dealCard();
players[h]->first->next = temp;
cout<<endl;
deck.printDecks();
}
}
Card*Decks::dealCard(){
Card*Card=deckList[deckList.size()-1];
deckList.pop_back();
回程卡;
}
无效游戏::dealRound(整数玩家数,牌组){
对于(int h=0;hfirst=temp;
cout您的问题是,dealRound()
获取了组的副本,这意味着它只存在到该函数结束。相反,请尝试获取对组的指针或引用。您的方法签名:
void Game::dealRound(int playernum, Decks deck){
^^^^^ ~~~!!
指示您通过值传递到Game::dealRound
您的牌组
。通过这种方式,它将被复制,一旦dealRound结束,您在牌组
中所做的任何更改都将丢失。解决方案是通过引用传递:
void Game::dealRound(int playernum, Decks& deck){
^ ~~~!!
您正在将牌组的副本传递给Game::dealRound,因此任何更改都不会影响原始牌组。更改Games::dealRound以通过引用接受牌组:
void Game::dealRound(int playernum, Decks& deck){
^ ~~~!!
void Game::dealRound(int playernum,Decks&deck)
完美答案。修复了。谢谢!为什么要调用deck.printDecks()两次?