0

正常に動作する別のプログラムに非常によく似たコードがあるため、ここでエラーが発生する理由がわかりません。このフォーラムに投稿するのはこれが初めてなので、何を含めればよいかわかりませんが、エラーが表示されるコードは次のとおりです。

int AddPlayers(vector<Player>& players)
{
    string name;
    double wins;
    double losses;
    double draws;
    int x = 0;
    Player findPlayer("null", 0, 0, 0);
    cout << "Name of player you would like to add?" << endl;
    cin >> name;
    for (x = 0; x < players.size(); x++ )
    {
        findPlayer = players[x];
        findPlayer.getName();
        x++;
        if (name == findPlayer.getName())
        {
            cout << "That player is already in the tournament." << endl;
            return 1;
        }
        Player newPlayer = (name, wins, losses, draws);
        players.push_back(newPlayer);
    } 
}
4

3 に答える 3

3
Player newPlayer = (name, wins, losses, draws);

これは間違った構文です。コンマ演算子が動作しているのを目の当たりにしています。これは、実際にnewPlayerは の値で初期化されていますdrawsdrawsは であるためdouble、初期化によってそのエラーが発生します。

あなたが欲しいようです:

Player newPlayer(name, wins, losses, draws);
于 2013-03-28T18:00:59.770 に答える
1
Player newPlayer = (name, wins, losses, draws);

括弧を取り除いた後、あなたは残ります

Player newPlayer = name, wins, losses, draws;

これがコンマ演算子です。オペランドを評価し、最後のものを返しますdraw。この場合はそうです。drawは adoubleであり、明らかにPlayera を取るコンストラクターがないdoubleため、エラーが発生します。とにかく、4 つの変数からオブジェクトを構築する必要があります。

Player newPlayer(name, wins, losses, draws);
于 2013-03-28T18:03:30.783 に答える
1

この命令:

Player newPlayer = (name, wins, losses, draws);

Player式からオブジェクトをコピー初期化しようとします(name, wins, losses, draws)。コンマ演算子のセマンティクスにより、最初の 3 つのサブ式の値は破棄され、最後のサブ式のみが式の値 (および型) を決定します。

したがって、式:

(name, wins, losses, draws)

次の式と同等です。

 (draws)

drawsタイプが であるためdouble、これは、タイプのオブジェクトを でコピー初期化しようとする試みPlayerですdoublePlayerを受け取るコンストラクターがないように見えるためdouble、コンパイラーはエラーを生成します。

そこに式を書きたくない可能性が高いですが、Playerのコンストラクターの引数リストを書きたいと思います。

 Player newPlayer(name, wins, losses, draws);
于 2013-03-28T18:03:44.860 に答える