所以我有一个主要是静态的类,因为它需要一个可以随时访问的库而不需要实例化。无论如何,这个类有一个公共静态成员,一个名为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};
提前致谢,
查尔斯
答案 0 :(得分:1)
上述错误是由于您无意中将default_cfg
重新声明为cpp文件中的可变项。
将const添加到定义中会修复它:
const module_cfg module::default_cfg = {15, 19};