class Card
{
private:
int face;
char suit;
public:
Card();
Card(char, int);
int getRank() { return face; }
char getSuit() { return suit; }
void setFace(int cardFace) { face = cardFace; }
void setSuit(char cardSuit) { suit = cardSuit; }
};
Card::Card(char cardSuit, int cardFace)
{
face = cardFace;
suit = cardSuit;
}
class Player
{
public:
Player();
vector<Card>allCards;
vector<Card>hand; //holds 7 cards
};
Player::Player()
{
std::random_device seed;
std::mt19937 rng(seed());
for (int i = 1; i <= 13; i++)
{
Card c1('D', i), c2('C', i), c3('H', i), c4('S', i);
allCards.push_back(c1);
allCards.push_back(c2);
allCards.push_back(c3);
allCards.push_back(c4);
}
shuffle(std::begin(allCards), std::end(allCards), rng);
for (int x = 0; x < 7; x++) {
hand[x] = allCards.back(); <---------- Error here
allCards.pop_back();
}
}
クラスを使用してゲームを作成しようとしていますが、ある時点で各プレーヤーに7枚のカードを割り当てる必要がありますが、これは私が管理しようとしている方法では機能しません。
次のエラーが表示されます
Error: Thread 1: EXC_BAD_ACCESS (code=1, address=0x0)
hand
ベクトルを初期化するのを忘れました。デフォルトでは、のサイズが0
あり、アクセスhand[x]
は範囲外です。
一定のサイズになることがわかっている場合は、Player
コンストラクターの初期化リストでそのサイズを初期化できます。
Player::Player() : hand(HAND_SIZE) {
...
}
または、他の方法で初期化されない限りpush_back()
、hand
が空であるため、使用するコードを変更できます。
hand.push_back(allCards.back());
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加