错误比较if语句中的枚举类型

时间:2014-07-26 15:27:32

标签: c++

每当我尝试使用findPieceAt函数给我一个数组中的位置时,我都会收到错误。在下面的代码中。

if (findPieceAt(newRow, newCol) != -1)
    {
        if (chessPieces[findPieceAt(newRow, newCol)].getColor == turn) //line with error
        {
            cout << "invalid attack on same color" << endl;
            return false;
        }
        else
        {
            if (chessPieces[findPieceAt(oldRow, oldCol)].captureMove(newRow, newCol) == true);
            {
                chessPieces[findPieceAt(newRow, newCol)].isCaptured;
                cout << "capture of " << chessPieces[findPieceAt(newRow, newCol)].getFullName << " is successful" << endl;
                return true;
            }
        }
    }

findPieceAt函数如下所示。

int Chess::findPieceAt(int row, int col)
{
    for (int index = 0; index < NUM_CHESS_PIECES; index++)
    {

        if (chessPieces[index].isAt(row, col) == true)
        {
            return index;
        }
        else
        {
            return -1;
        }
    }
}

getColor函数如下所示。

Color ChessPiece::getColor()
{
    return color;
}

转弯定义如下

void Chess::gameLoop(istream & input)
{

    Color turn = Black;  // Black will start the game

chessPieces数组

private:
    static const int NUM_ROWS = 8, NUM_COLS = 8;
    static const int NUM_CHESS_PIECES = 32;
    ChessPiece chessPieces[NUM_CHESS_PIECES];
};

使用的枚举类型

enum ChessPieceType { Pawn, Rook, Knight, Bishop, Queen, King };
enum Color { White, Black };

1 个答案:

答案 0 :(得分:1)

您缺少括号,因为getColor是函数调用:

    if (chessPieces[findPieceAt(newRow, newCol)].getColor() == turn )

此外,您可以缓存findPieceAt(newRow, newCol)的值,而不是在代码中重复调用它。

此外,由于您没有发布包含错误的整个函数,因此您需要确保在所有退出点返回bool。如果findPieceAt(newRow, newCol)返回-1,则您发布的代码可能不会返回任何内容。不从具有返回类型的函数返回值是未定义的行为。