c++ how to have same enum members name in different enum names without getting err:redefinition; previous definition was ‘enumerator’

The problem is that old-style enumerations are unscoped. You can avoid this problem (provided your compiler has the relevant C++11 support) by using scoped enumerations:

enum class GameObjectType { NINJA_PLAYER };

enum class GameObjectTypeLocation { NONE, MASSAGE_ALL, NINJA_PLAYER };

Alternatively, you can put your old-school enumerations in namespaces:

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

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

Then your enum values will be foo::NINJA_PLAYER, bar::NINJA_PLAYER etc.

If you have the possibility to use C++11 I would recommend to use enum class feature to avoid collisions:

enum class GameObjectType
{
     NINJA_PLAYER

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


};

Edit: If you do not have this ability, then you will need to use two different namespaces for each enum.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)