c如何在不同的枚举名称中具有相同的枚举成员名称,而不会得到错误:redefinition;以前的定义是“枚举器”

我有我包含在我的所有文件的配置文件
我有不同的枚举,但在每个枚举内部都有相同的元素名称
例如:config.h

enum GameObjectType
{
     NINJA_PLAYER

};
enum GameObjectTypeLocation
{
    NONE,
    MASSAGE_ALL,  //this is for ComponentMadiator
    NINJA_PLAYER


};

但是当我尝试使用适当的枚举名称调用枚举来编译项目时

m_pNinjaPlayer = (NinjaPlayer*)GameFactory::Instance().getGameObj(GameObjectType::NINJA_PLAYER);
    ComponentMadiator::Instance().Register(GameObjectTypeLocation::NINJA_PLAYER,m_pNinjaPlayer);

我正在收到编译错误:

error C2365: 'NINJA_PLAYER' : redefinition; previous definition was 'enumerator' (..\Classes\GameFactory.cpp)
2>          d:\dev\cpp\2d\cocos2d-x-3.0\cocos2d-x-3.0\projects\lettersfun\classes\config.h(22) : see declaration of 'NINJA_PLAYER'

我怎么能在config.h里保留不同名字的枚举,但是同样的元素名字呢?

最佳答案
问题是老式的枚举是没有范围的。您可以通过使用范围枚举来避免此问题(如果您的编译器具有相关的C 11支持):

enum class GameObjectType { NINJA_PLAYER };

enum class GameObjectTypeLocation { NONE, MASSAGE_ALL, NINJA_PLAYER };

或者,您可以将您的旧学校枚举放在命名空间中:

namespace foo
{
  enum GameObjectType { NINJA_PLAYER };
} // namespace foo

namespace bar
{
  enum GameObjectTypeLocation { NONE, MASSAGE_ALL, NINJA_PLAYER };
} // namespace bar

那么你的枚举值将是foo :: NINJA_PLAYER,bar :: NINJA_PLAYER等

转载注明原文:c如何在不同的枚举名称中具有相同的枚举成员名称,而不会得到错误:redefinition;以前的定义是“枚举器” - 代码日志