2017-04-27 39 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; 
    } 
} 

我希望这会有所帮助。