在C ++头文件中初始化一个数组

时间:2015-01-30 02:40:17

标签: c++ arrays

我正在尝试在类的头文件中初始化一个数组:

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]等的情况下定义此数组?

2 个答案:

答案 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];
};