我在GlobalGameEnums.h中创建了一个枚举。我已经在Board.h中包含了这个标题,我已经在我的类中声明了但它不会让我使用枚举值。
GlobalGameEnums.h:
#ifdef GLOBALGAMEENUMS_H
#define GLOBALGAMEENUMS_H
enum class e_Side
{
Right,
Left
};
#endif
Board.h:
#ifndef BOARD_H
.
.
#include "GlobalGameEnums.h"
class Board
{
public:
Board(int i_boardSize, int i_lowBound, int i_highBound);
~Board();
int MakePlayerMove(enum e_Side i_sideTaken )
{
switch (i_sideTaken)
{
case e_Side::Left:
break;
case e_Side::Right:
break;
}
}
private:
std::vector<Cell> m_cellVector;
};
#endif
在方法MakePlayerMove的声明中,它确实识别e_Side类型,但在方法体中,它给出了使用左/右(Error: enum "e_Side" has no member "Left"
)的错误。
我尝试了很多配置并搜索了一个旧的解决方案,但无法使其正常工作。
答案 0 :(得分:5)
枚举标头中的标头保护错误。你有#ifdef而不是#ifndef。
答案 1 :(得分:-1)
对于预C ++ 11,请按以下方式声明你的枚举:
#ifndef GLOBALGAMEENUMS_H
#define GLOBALGAMEENUMS_H
namespace mygame
{
enum e_Side {
Right,
Left
};
}
#endif
请勿在枚举声明中使用“class”。 您的Board类应如下所示:
#ifndef BOARD_H
#define BOARD_H
...
#include "GlobalGameEnums.h"
...
namespace mygame
{
class Board
{
public:
Board(int i_boardSize, int i_lowBound, int i_highBound);
~Board();
int MakePlayerMove(e_Side temp_sideTaken)
{
e_Side i_sideTaken = Left;
switch (i_sideTaken)
{
case Left:
break;
case Right:
break;
}
}
private:
std::vector<Cell> m_cellVector;
};
}
#endif
我也鼓励使用名称空间。