L'erreur que je reçois est « Aucun membre nommé en détail dans l'espace de noms Chessgame Voici le code correspondantErreur de compilateur C++; question Namespace Je suppose que
//ChessPiece.h
namespace ChessGame
{
class ChessBoard;
namespace detail
{
class IChessPieceEnums{
public:
enum PieceType{PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING};
enum PieceDirection{ UP = 1 , DOWN = -1};
enum PieceId{ WHITE_PIECE_ID, BLACK_PIECE_ID };
};
}
//represents an abstract chess piece interface
class IChessPiece : public detail::IChessPieceEnums
{
public:
///...
}
} // end namespace
//GameBoard.h
#include "ChessPiece.h"
namespace ChessGame
{
class IChessPiece;
class ChessBoard
{
public:
/*********ERROR OCCURS ON THIS FUNCTION************/
bool isOccupiedWithEnemy(int row, int col,const ChessGame::detail::IChessPieceEnums::PieceId& pieceId);
}
}
Tous les gars idée
EDIT:.? Un autre exemple minimal:
//Piece.h
#ifndef TestProject_C___Piece_h
#define TestProject_C___Piece_h
#include "Board.h"
namespace Foo {
namespace detail{
struct PieceEnums{
enum PieceID{ ID1, ID2 };
};
}
class Board;
class Piece{
public:
void foo(Board& b)const;
};
}
#endif
//board.h
#ifndef TestProject_C___Board_h
#define TestProject_C___Board_h
#include "Piece.h"
namespace Foo {
class Piece;
class Board{
bool isOcc(int x, int y,const detail::PieceEnums::PieceID pid)const;
};
}
#endif
Et l'erreur est « Utilisation de détails d'identification non déclaré
Notez que ceci est dans plusieurs fichiers, alors peut-être un problème avec son lien?
Correction des erreurs de syntaxe, cela compile bien. –
C'est tellement bizarre ... – dchhetri
Pourquoi pieceId est-il une référence? Êtes-vous par hasard en appelant osOccupiedWithEnemy avec un PieceId littéral? – pezcode