1

我在deck.cpp 中有一个函数,它处理来自一副牌的随机牌:

QVector<card> Deck::deal_rand_cards(QVector<card> vDeck, int quantity)
{

QVector<card> vDealt;
int deckSize = vDeck.size();
card randCard;

qsrand(QTime::currentTime().msec());


for (int i=0;i<quantity;i++)
{
    int rn=rand()%deckSize;
    randCard = vDeck[rn];
    qDebug()<<vDeck.size();

    vDealt.append(randCard);

    vDeck.remove(rn);
}

return vDealt;
}

我的问题是,每次从 mainwindow.cpp 运行该函数时,vDeck 都包含完整的牌组,而不是牌组减去我用该函数删除的已处理牌。

如果我两次发 3 张牌,调试打印:

54 53 52 54 53 52

如何更新其他函数和其他文件中使用的函数中的变量?我感觉涉及到一个指针,但我仍然不太了解这个概念。

谢谢

这是deck.h

#ifndef DECK_H
#define DECK_H
#include <QString>
#include <QVector>

struct card
{
    QString suit;
    QString color;
    int rank;
};

class Deck
{

private:
    int size;
    int jokers;

public:
    QVector<card> build_deck(int deckSize, int jokers);
    QVector<card> deal_rand_cards(QVector<card> vDeck, int quantity);

};

#endif // DECK_H
4

1 回答 1

1

您需要将 vDeck 的引用传递给deal_rand_cars函数,目前您正在处理 vDeck 的副本。

QVector<card> deal_rand_cards(QVector<card> &vDeck, int quantity);
                                           ^^^ pass by reference

如果您使用引用作为参数,该函数将使用原始数据而不是副本。

于 2012-12-29T01:05:18.677 回答