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 枚のカードを 2 回配ると、デバッグは次のように出力します。

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 に答える