C ++< 11:初始化静态const类成员

时间:2016-04-18 06:51:37

标签: c++ static initialization const member

所以我有一个主要是静态的类,因为它需要一个可以随时访问的库而不需要实例化。无论如何,这个类有一个公共静态成员,一个名为cfg的结构,它包含它的所有配置参数(主要是由静态方法实现的算法的边界和容差)。最重要的是它有一个const静态成员,它是一个与cfg相同类型的结构,但具有参数的所有默认/通常值。我的模块的用户可以加载它,部分修改它,并将其作为cfg应用,或者将其用作参考,或者我知道什么。

现在我似乎无法初始化这个家伙。没有实例化(并且它是静态的)初始化不会在构造函数中发生(无论如何都没有)。类中的init返回错误,cpp中的init返回声明冲突。这里的前进方向是什么?

这是一个与我得到完全相同的行为的例子:

module.h:

#ifndef MODULE_H
#define MODULE_H

typedef struct {
    float param1;
    float param2;
} module_cfg;

class module
{
    public:
        module();
        static module_cfg cfg;
        const static module_cfg default_cfg;

};

#endif // MODULE_H

module.cpp:

#include "module.h"
using namespace std;

module_cfg module::default_cfg = {15, 19};

int main(int argc, char* argv[])
{
    //clog << "Hello World!" << endl << endl;

    return 0;
}

module::module()
{
}

上述错误:

module.cpp:11:20:错误:冲突声明&module -cfg module :: default_cfg&#39;  module_cfg module :: default_cfg = {15,19};                     ^ 在module.cpp中包含的文件中:8:0: module.h:14:29:错误:&#39; module :: default_cfg&#39;有一个先前的声明为&#39; const module_cfg module :: default_cfg&#39;      const static module_cfg default_cfg;                              ^ Makefile.Debug:119:目标配方&#39; debug / module.o&#39;失败 module.cpp:11:20:error:声明&const; const module_cfg module :: default_cfg&#39;课外不定义[-fpermissive]  module_cfg module :: default_cfg = {15,19};

提前致谢,

查尔斯

1 个答案:

答案 0 :(得分:1)

上述错误是由于您无意中将default_cfg重新声明为cpp文件中的可变项。

将const添加到定义中会修复它:

const module_cfg module::default_cfg = {15, 19};