首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C++头文件中初始化数组

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

Stack Overflow用户
提问于 2015-01-30 02:40:17
回答 2查看 5K关注 0票数 0

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

代码语言:javascript
复制
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]等操作的情况下定义这个数组?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-30 03:01:26

可以使用以下方法在头文件中声明classclass成员变量:

代码语言:javascript
复制
class C {
   private:
      static float p[26];
};

您可以使用以下方法在.cpp文件中定义它:

代码语言:javascript
复制
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
        };
票数 3
EN

Stack Overflow用户

发布于 2015-01-30 02:55:36

不幸的是,您无法在类声明中初始化静态成员( const integral和const enum类型都有异常)。

您应该在一个单独的编译单元中定义(并初始化)静态成员(通常是在与类相对应的*.cpp文件中完成)。

所以,你会有:

代码语言:javascript
复制
// code in C.h
class C {
static float p[]; // declaration of C::p
}

代码语言:javascript
复制
// code in C.cpp
float C::p[] = { /* put your numbers here */ }; // definition of C::p

如果术语“声明”和“定义”让您感到困惑,请阅读this question的答案。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28228369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档