我在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
答案 0 :(得分:1)
您需要将vDeck的引用传递给deal_rand_cars
函数,目前您正在处理vDeck的副本。
QVector<card> deal_rand_cards(QVector<card> &vDeck, int quantity);
^^^ pass by reference
如果使用引用作为参数,则该函数将使用原始数据而不是副本。