我试图在类的头文件中初始化一个数组:
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:非整型静态数据成员‘p’的类内初始化所需的错误
我被迫使用c++0x;如何在不执行p[0]、p[1]等操作的情况下定义这个数组?
发布于 2015-01-30 03:01:26
可以使用以下方法在头文件中声明class的class成员变量:
class C {
private:
static float p[26];
};您可以使用以下方法在.cpp文件中定义它:
float C::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
};发布于 2015-01-30 02:55:36
不幸的是,您无法在类声明中初始化静态成员( const integral和const enum类型都有异常)。
您应该在一个单独的编译单元中定义(并初始化)静态成员(通常是在与类相对应的*.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的答案。
https://stackoverflow.com/questions/28228369
复制相似问题