初始化C ++映射时出错

时间:2014-04-27 16:31:10

标签: c++

我创建了以下类:

class A{
 public:
 static std::map<std::pair<unsigned, unsigned>, unsigned> var1;
};

std::map<std::pair<unsigned, unsigned>, unsigned> A::var1[std::make_pair(0,0)]=0; //it is used to initialize static variable var1 inside A.

然而,当我这样做时,我收到以下错误:

array bound is not an integer constant before ‘]’ token

我可以用某种方法用一些默认值初始化var1吗?

4 个答案:

答案 0 :(得分:3)

static std::map<std::pair<unsigned, unsigned>, unsigned> CreatVar1() {
  std::map<std::pair<unsigned, unsigned>, unsigned> var;
  var[std::make_pair(0,0)]=0;
  return var;
}
std::map<std::pair<unsigned, unsigned>, unsigned> A::var1 = CreateVar1();

或者,在C ++ 11中:

std::map<std::pair<unsigned, unsigned>, unsigned> A::var1 = {{{0, 0}, 0}};

答案 1 :(得分:3)

您无法同时声明您的变量并使用A[...]=初始化其中一个项目。

std::map<std::pair<unsigned, unsigned>, unsigned> A;
A::var1[std::make_pair(0,0)]=0;

应该有效。如果是C ++ 11,则可以使用括号初始化

std::map<std::pair<unsigned, unsigned>, unsigned> A = {{{0,0}, 0}};

答案 2 :(得分:2)

使用C ++ 11

#include <map>
using namespace std;

map<int, char> m = {{{1, 1}, 2}, {{2, 2}, 3}, ...};

或者使用boost.assign。

答案 3 :(得分:0)

在C ++ 98中,您可以使用函数初始化静态变量。例如,你可以做这样的事情

typedef std::map<std::pair<unsigned, unsigned>, unsigned> mymap;
mymap init() {
 mymap m;
 m[std::make_pair(0,0)] = 0;
 return m;
}

class A {
 public:
  static mymap var1;
};
mymap A::var1 = init();

如果你可以使用C ++ 11,那就更短了

std::map<std::pair<unsigned, unsigned>, unsigned> A::var1 = {std::make_pair(std::make_pair(0, 0), 0)};
相关问题