我正在尝试在类的头文件中初始化一个数组:
class C {
private:
static float p[26] = {
0.09, 0.02, 0.02, 0.04, 0.12, 0.02, 0.03,
0.02, 0.09, 0.01, 0.01, 0.04, 0.02, 0.06,
0.08, 0.02, 0.01, 0.06, 0.04, 0.06, 0.04,
0.02, 0.02, 0.01, 0.02, 0.01
};
...
我从g ++中收到以下错误:
C.h:15:33:错误:在'{'标记
之前,不允许使用括号括起的初始值设定项C.h:20:9:抱歉,未实现:非静态数据成员初始值设定项
C.h:20:9:错误:'constexpr'需要对非整数类型的静态数据成员'p'进行类内初始化
我被迫使用c++0x
;如何在不执行p[0]
,p[1]
等的情况下定义此数组?
答案 0 :(得分:2)
不幸的是,您无法在类声明中初始化静态成员(对const const和const枚举类型进行例外处理)。
您应该在一个单独的编译单元中定义(并初始化)静态成员(通常在与您的类对应的* .cpp文件中完成)。
所以,你将拥有:
// code in C.h
class C {
static float p[]; // declaration of C::p
}
和
// code in C.cpp
float C::p[] = { /* put your numbers here */ }; // definition of C::p
如果“声明”和“定义”这两个词让您感到困惑,请阅读this question的答案。
答案 1 :(得分:2)
您可以使用以下命令在头文件中声明static
的{{1}}成员变量:
class
您可以使用以下命令在.cpp文件中定义它:
class C {
private:
static float p[26];
};