2017-04-27 37 views
0

製作象棋遊戲,我不能重載==操作符(認爲是問題,ofc如果我在數組中添加了正確的元素)。C++ overloading ==操作符示例

enum squerState{EMPTY, ROOK, KNIGHT, BISHOP, QUEEN, KING, PAWN}; 

class Board 
{ 
public: 
Board(); 
~Board(); 

friend bool operator==(const Board& lhs, const Board& rhs); 

squerState stanjePolja; 
squerColor bojaPolja; 
pieceColor bojaFigurice; 

Board* board[8][8]; 
}; 

//.ccp

Board* piece; 
for(int x= 0; x < 8; x++) 
{ 
    for(int y=0; y < 8; y++) 
    { 
    piece->stanjePolja = squerState::ROOK; 
    piece->bojaPolja = squerColor::WHITE; 
    piece->bojaFigurice = pieceColor::BLACK_PIECE; 

    board[y][x] = piece; 
    } 
} 

//過載==

bool operator==(const Board& lhs, const Board& rhs) 
{ 
    return lhs.stanjePolja == rhs.stanjePolja; 

} 

//繪製測試板

void Board::drawBoard() 
{ 
    for (auto y = 0; y < 8; y++) 
    { 
     for (auto x = 0; x < 8; x++) 
     { 
      if (board[y][x] == squerState::ROOK) 
      { 
       std::cout << 'O'; 
      } 
      else 
       std::cout << 'X'; 
     } 
     std::cout << std::endl; 
    } 
} 

問題是當我試圖用ROOK's繪製測試板時。

if (board[y][x] == squerState::ROOK) 

謝謝!

+2

請發佈[MCVE]。 –

回答

0

在線路

if (board[y][x] == squerState::ROOK) 

它看起來像在左手側的表達式的類型是Board*,但表達對右手側的類型是enum squerState。您沒有爲這些類型定義一個等號運算符,並且它們不能通過其他方式進行比較。

您可能希望您的Board類包含一個SquareState實例的數組。

enum Piece { None, Pawn, ... }; 
enum Color { Black, White }; 

struct SquareState 
{ 
    Piece piece_; 
    Color color_; 
}; 

struct Board 
{ 
    void drawBoard() const; 
    SquareState board_[8][8]; 
}; 

void Board::drawBoard() const 
{ 
    for(int i = 0; i < 8; ++i) 
    { 
      for(int j = 0; j < 8; ++j) 
      { 
       switch(board_[ i ][ j ].piece_) 
       { 
        case Piece::None: 
         std::cout << " "; 
         break; 
        case Piece::Pawn: 
         std::cout << "P"; 
         break; 
        // ... 
       } 
      } 
      std::cout << std::endl; 
    } 
} 

我希望這會有所幫助。