我创建了以下类:
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吗?
答案 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)};