2012-04-05 12 views
3

私はC++にはかなり新しく、問題を見つけました。
私はブラックジャックのゲームを書こうとしています。私はさまざまな種類の 'char'型の52の配列を持っており、それをシャッフルしたいのです。どうしたのかは分かりませんが、それは問題ではありません。私は 'ShuffleDeck'と呼ばれる関数を作ったが、動作しません、配列を返すことはできません。私も配列を参照することはできません。これについてどうすればいいですか?ここで私が話しているコードの一部です。関数を使用して配列を変更するにはどうすればよいですか?

void ShuffleDeck(bool &rgCards[]) { 
    for (int i = 1; i < 52; ++i) { 
     //something 
    } 
    return rgCards[]; 
} 

答えて

3

std::vectorを使用し、値をシャッフルします。好ましくは、関数を参照して渡し、元のベクトルを処理することが好ましい。

スニペットから、それはあなたがそれを行うことを期待完全には明らかではない - あなたが参照してboolの配列を渡すが、その文脈では全く意味がありません構文rgCards[]intとしてそれを返します。

編集:Fredのコメントによれば、random_shuffleを使用できます。

+1

それとも使用[ 'random_shuffle()'](http://stdcxx.apache.org/doc/stdlibref/random-shuffle.html)独自のシャッフル関数をローリングするのではなく、 'std :: vector'を使用します。 –

+0

@FredLarson cool、のすべてのものが私を驚かせ続ける。 :) –

+0

ええ、私はこれでどこに行くのか分かりませんでしたが、私はここにコードを投稿したくありませんでした。助けてくれてありがとう! – argoneus

2

あなたが提供したコードスニペットから、配列への参照をShuffleDeck()に渡そうとしているようです。配列参照のC++構文はdata-type (&)[N]です。ここで、Nは配列内の要素の数です。あなたの関数は、あなたがこのテンプレート機能させることができますし、あなたはおそらくコンテナを使用するように切り替える必要があり、C++を使用しているので、コンパイラは、配列の長さ

最後に
template<size_t N> 
void ShuffleDeck(char (&rgCards)[N]) { ... } 

を推測している

void ShuffleDeck(char (&rgCards)[52]) { ... } 

に変更しますCスタイルの配列の代わりにstd::arrayまたはstd::vectorなどのクラスを使用します。

1

あなたが書いたものに最も類似したコードを維持するために、私は、最小限の修正を行うだろう:あなたが行います任意の変更を&が必要とされていないことに注意して、インデックスは0

void ShuffleDeck(bool rgCards[]) { 
    for (int i = 0; i < 52; ++i) { 
     //something 
    } 
} 

から開始する必要がありますrgCardsに[I]あなたもこの

void shuffle(int* deck, int size) 
{ 
    for(int i =0; i < size; i++) 
    { 
    deck[i] = i; 
    } 
} 

これは、配列が実際として渡されることを示してを行うことができShuffleDeck

2

への呼び出し後に使用可能になりますポインタ。 IMO

int deck[52]; 
shuffle(deck,52); 
0

クリーン溶液:

class Deck { 
    char cards[52]; 
public: 
    void Shuffle(); 
}; 

void Deck::Shuffle() 
{ 
    // I can change cards here because both cards and Shuffle are members of Deck 
} 
関連する問題