【发布时间】:2012-01-15 00:59:06
【问题描述】:
我得到的错误是“命名空间 ChessGame 中没有名为 detail 的成员。这是相关代码
//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);
}
}
有什么想法吗?
编辑:另一个最小的例子:
//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
错误是“使用未声明的标识符详细信息”
请注意,这是跨多个文件的,所以可能是链接问题?
【问题讨论】:
-
修复语法错误,编译正常。
-
为什么pieceId是参考?您是否有机会使用文字 PieceId 调用 osOccupiedWithEnemy?
-
@pezcode:是的,我猜它不需要。我将通过给它一个位置(x,y)和一个文字 PieceId 来调用它,是的
标签: c++ namespaces compiler-errors