2014-07-26 74 views
0

每當我嘗試使用findPieceAt函數給我一個位置在數組中時,我得到一個錯誤。在下面的代碼中。錯誤比較if語句中的枚舉類型

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:binary'==':找不到操作符它需要一個'overloaded-function'類型的左手操作數(或者沒有可接受的轉換)「 – babymama9000

+1

如果你再次讀到這個錯誤信息,你認爲它可能是什麼?特別是如果你看看錯誤所在的那一行。 –

回答

1

你缺少括號枚舉類型,如getColor是一個復nction電話:

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

此外,您還可以緩存重複調用它在你的代碼的findPieceAt(newRow, newCol)值來代替。

此外,由於您沒有發佈有錯誤的整個功能,因此您需要確保在所有退出點返回bool。如果findPieceAt(newRow, newCol)返回-1,您發佈的代碼可能不會返回任何內容。不從具有返回類型的函數返回值是未定義的行爲。