1

2つの質問があります。2つ目はオプションです。まず、以下のプログラム(単純なカードプログラムのプロトタイプ)で、次のエラーが発生します。

(29):エラーC2660:'shuffle':関数は次のコードで1つの引数を取りません:

#include "stdafx.h"
#include <iostream>
#include <sstream>
#include <deque>
#include <algorithm>
using namespace std;

deque<int> cardDeck (51);
void flip(); //Prototype flip()
void shuffle(); //Prototype shuffle()

int _tmain(int argc, _TCHAR* argv[])
{
    ostream& operator<<(ostream& os, deque<int> dq); //overload << operator to accept deque 
                                                       //arguments
    for (int a=52; a>0; a--) { //initialize the 52 cards in a deck 
        cardDeck.push_front(a); 
    }
    flip(); //prompt my input to check data
    return 0;
}

void flip() { //flip over card in specified location in the deck
    int input;
    cin >> input;
    cout<<cardDeck[input]<<endl;
    shuffle(cardDeck);
    flip();
}

void shuffle(deque<int> dq) {  //use Fisher-Yates algorithm to efficiently and accurately 
                               //randomize card order
     for(int i=dq.size()-1; i>-1; i--) { 
         int j = rand() % (i + 1);
         if(i != j) {
             swap(dq[j], dq[i]);
         }
     }
}

なぜこのエラーが発生するのですか?(私は周りを見回して、それを自分で解決しようとしました)

第二に、c ++のドキュメントを見つけるのが簡単ではないため(swap();を利用するバージョンの場合)、フィッシャーイェーツアルゴリズムを適切に実行しているかどうかはわかりません(これに答えたり、指摘したりするためのブラウニーのポイントクラスの欠如を含まない、ひどくひどいコーディング慣行)

前もって感謝します!

4

3 に答える 3

2

このエラーが発生する理由は、引数を取らない関数として宣言する ためです。shuffle

void shuffle();

もう1つの注意点は、その関数でdequeを参照することをお勧めします。そうしないと、ローカルコピーをシャッフルして、目的の副作用が発生しません。

あなたはおそらくそれをこのように見たいと思うでしょう:

void shuffle(deque<int>& dq);

また、要素を交換するiter_swap代わりに使用することもできます。デキューでは、おそらく違いはありませswapんが、違いはあります。listmap

于 2011-09-08T04:46:47.277 に答える
0

関数宣言に引数を入れるのを忘れたと思います

void shuffle();

する必要があります

void shuffle(deque<int> dq);
于 2011-09-08T04:46:30.990 に答える
0

問題は、プログラムの上部で「シャッフル」のプロトタイプを作成したことだと思います。

void shuffle();

これには引数がないことに注意してください。C ++はワンパスコンパイラを使用するため、シャッフルを呼び出した時点で、コンパイラが後で実装を確認していないため、これが使用可能なシャッフルの唯一の宣言です。その結果、1つの引数でゼロ引数関数を呼び出していると見なされるため、上記のエラーが発生します。

これを修正するには、実際に定義した関数と一致するようにプロトタイプを更新します。

お役に立てれば!

于 2011-09-08T04:46:55.667 に答える