C++ 在公共方法中使用pop_back(),但一旦退出该方法,向量将返回到原始向量

C++ 在公共方法中使用pop_back(),但一旦退出该方法,向量将返回到原始向量,c++,vector,C++,Vector,我正在写一个21点程序。我用的是两种不同的职业,甲板和游戏。我将我的洗牌牌牌堆存储在一个向量中,该向量对牌堆类是私有的。我调用一个名为dealCard()的Deck方法,该方法将向量中的最后一个元素分配给玩家,然后从向量中弹出该元素。此方法在游戏方法playRound中调用,该方法按顺序向每位玩家发放2张牌。这个很好用,我给每个经销商买了两张不同的卡。但是,一旦playRound方法退出,向量将返回到原始的全组 Card* Decks::dealCard(){ Card* card =

我正在写一个21点程序。我用的是两种不同的职业,甲板和游戏。我将我的洗牌牌牌堆存储在一个向量中,该向量对牌堆类是私有的。我调用一个名为dealCard()的Deck方法,该方法将向量中的最后一个元素分配给玩家,然后从向量中弹出该元素。此方法在游戏方法playRound中调用,该方法按顺序向每位玩家发放2张牌。这个很好用,我给每个经销商买了两张不同的卡。但是,一旦playRound方法退出,向量将返回到原始的全组

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()两次?