Всякий раз, когда я пытаюсь использовать функцию 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 };
Вам не хватает круглых скобок, поскольку getColor
- это вызов функции:
if (chessPieces[findPieceAt(newRow, newCol)].getColor() == turn )
Кроме того, вы можете кэшировать значение findPieceAt(newRow, newCol)
вместо повторного вызова его в коде.
Кроме того, поскольку вы не опубликовали всю свою функцию с ошибкой, вам нужно убедиться, что вы bool
во всех точках выхода. Код, который вы опубликовали, не возвращает ничего, если findPieceAt(newRow, newCol)
возвращает -1. Не возвращать значение из функции, которая имеет тип возврата, является неопределенным поведением.