初始化头文件中C++数组
Initialize an array in C++ header file
我正在尝试初始化类头文件中的数组:
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]
等的情况下定义这个数组?
您可以使用以下命令在头文件中声明class
的static
成员变量:
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
如果术语"声明"和"定义"让您感到困惑,请阅读此问题的答案。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '