将enum与std :: map<>混合

时间:2015-11-30 18:59:37

标签: c++ enums std

我一直试图编译以下代码一段时间没有成功:

enum class gType {GAME1, GAME2, GAME3};
typedef std::map<std::string, gType> gamesTypesMap;
gamesTypesMap gameTypes;
gameTypes["game_one"] = gType::GAME1;

我收到3个错误:

error: C++ requires a type specifier for all declarations gameTypes["game_one"] = gType::GAME1;
error: size of array has non-integer type 'const char [8]' gameTypes["game_one"] = gType::GAME1;
error: 'gType' is not a class, namespace, or scoped enumeration

gameTypes [&#34; game_one&#34;] = gType :: GAME1;

非常感谢任何帮助

2 个答案:

答案 0 :(得分:2)

确保包含地图和字符串标头,并使用支持C ++ 11的编译器。以下代码使用clang ++

在我的机器上编译
#include <string>
#include <map>

int main()
{
  enum class gType {GAME1, GAME2, GAME3};
  typedef std::map<std::string, gType> gamesTypesMap;
  gamesTypesMap gameTypes;
  gameTypes["game_one"] = gType::GAME1;

  return 0;
}

答案 1 :(得分:0)

您缺少包含地图和字符串。通过这些包含并启用了C ++ 11支持,您的代码可以通过minGW编译器编译好。

#include <map>
#include <string>

enum class gType {GAME1, GAME2, GAME3};
typedef std::map<std::string, gType> gamesTypesMap;

int main()
{
  gamesTypesMap gameTypes;
  gameTypes["game_one"] = gType::GAME1;
  return 0;
}
相关问题