![](/img/trans.png)
[英]Is it possible to initialize static const member object in a class in C++?
[英]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.