ошибка сравнения перечислимых типов в операторе if

0

Всякий раз, когда я пытаюсь использовать функцию 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 };
  • 2
    И какую ошибку вы получаете?
  • 0
    «ошибка C3867:« ChessPiece :: getColor »: отсутствует список аргументов при вызове функции; используйте« & ChessPiece :: getColor »для создания указателя на член« Я также получил еще одну ошибку »ошибка C2678: двоичный файл = = ': оператор не найден, который принимает левый операнд типа 'перегруженная функция' (или нет приемлемого преобразования) "
Показать ещё 1 комментарий
Теги:

1 ответ

1

Вам не хватает круглых скобок, поскольку getColor - это вызов функции:

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

Кроме того, вы можете кэшировать значение findPieceAt(newRow, newCol) вместо повторного вызова его в коде.

Кроме того, поскольку вы не опубликовали всю свою функцию с ошибкой, вам нужно убедиться, что вы bool во всех точках выхода. Код, который вы опубликовали, не возвращает ничего, если findPieceAt(newRow, newCol) возвращает -1. Не возвращать значение из функции, которая имеет тип возврата, является неопределенным поведением.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню