繁体   English   中英

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

[英]C++ < 11 : Initialize static const class member

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

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

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

模块.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

模块.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' module_cfg module::default_cfg = {15, 19}; ^ 在 module.cpp:8:0:module.h:14:29 包含的文件中:错误:'module::default_cfg' 有一个先前的声明为 'const module_cfg module::default_cfg' const static module_cfg default_cfg; ^ Makefile.Debug:119: 目标 'debug/module.o' 的配方失败 module.cpp:11:20: 错误:'const module_cfg module::default_cfg' 在类外的声明不是定义 [-fpermissive] module_cfg 模块::default_cfg = {15, 19};

提前致谢,

查尔斯

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

在定义中添加 const 修复它:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM