初始化头文件中C++数组

Initialize an array in C++ header file

本文关键字:C++ 数组 文件 初始化      更新时间:2023-10-16

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

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"的类内初始化需要"constexpr"

我被迫使用c++0x;如何在不做p[0]p[1]等的情况下定义这个数组?

您可以使用以下命令在头文件中声明classstatic成员变量:

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
        };

不幸的是,您无法在类声明中初始化静态成员(常量积分和常量枚举类型除外)。

您应该在一个单独的编译单元中定义(和初始化)静态成员(通常在与您的类对应的 *.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

如果术语"声明"和"定义"让您感到困惑,请阅读此问题的答案。