1

こんにちは、私は 17 歳で、コーディングの方法を学ぼうとしています。コードのこのセクションのデバッグに問題があります。助けていただければ幸いです。

bool checkifwin(char grid[3][3], char player)
{
    if (checkverticle(char grid[3][3], char player) 
        || checkhorizontal(char grid[3][3], char player)
        || checkdiagonal( grid[3][3], player) 
       return true;
    else
       return false;
};

char の前に期待される一次式が表示されます。

4

3 に答える 3

4

checkverticle() は宣言ではなく関数の呼び出しであるため、「char」は必要ありません。

bool checkifwin(char grid[3][3], char player)
{
    if ( checkverticle(grid, player) || 
         checkhorizontal(grid, player) || 
         checkdiagonal( grid, player) return true;
    else return false;
};

コーディングのアドバイスです。私の意見では:

bool func()
{
    if (expr)
        return true;
    else
        return false;
}

素晴らしいスタイルではありません。次のようにリファクタリングすることをお勧めします。

bool func()
{
    bool result = false; // This just makes it clear the expected default.
    // You could even go as far as
    // bool result = expr  or event return expr; - although I suggest sticking with a
    // variable in case you need to debug.
    result = expr; // e.g. result = checkVert() || checkHoriz() || checkDiag();
    return result;
}
于 2012-02-15T02:25:11.593 に答える
2

関数を呼び出すときに型名を指定する必要はありません。

if (checkverticle(char grid[3][3], char player) // Remove char here and in other cases

さらにエラーについて -

checkverticle( grid[3][3] ... )

ここgrid[3][3]に、そのインデックスの文字が表示されます。あなたが本当に渡したいのはgrid、他の人が示唆したようにそれ自体です。もちろん、有効な配列インデックスにも注意してください。

于 2012-02-15T02:24:11.457 に答える
1

型宣言をパラメーターとして渡そうとしています。代わりにこれを試してください:

bool checkifwin(char grid[3][3], char player)
{
  return checkverticle(grid], player) || 
    checkhorizontal(grid, player) || 
    checkdiagonal(grid, player;

};
于 2012-02-15T02:26:40.177 に答える