2017-04-27 8 views
0

チェスのゲームを作成して、私は==演算子をオーバーロードできません(問題があると思います。C++のオーバーロード==演算子の例

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でテストボードを描画しようとしたときです。

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; 
    } 
} 

これが役立ちます。

関連する問題