在几个.cpp文件中使用globals结构,并在构造函数中初始化它

时间:2016-06-11 05:02:05

标签: struct include initialization globals

我知道有类似的问题,但没有一个解决这个问题。我想创建一个globals结构并使用默认值初始化它。我实现如下,但项目不会构建。

我已经尝试了我能想到的一切,最值得注意的是将*gxg的“extern”声明移入和移出标题保护并将结构更改为类,但得到相同的结果:项目因为globals构造函数的重复符号而不会构建。如果我不在多个.cpp文件中使用它,或者如果我在struct的实现文件中没有包含构造函数或析构函数,那么它会构建。

//  globals.hpp

#ifndef globals_hpp
#define globals_hpp

struct gxGlobals{
    double radius;
    bool easement;

    gxGlobals(); // constructor

} ;

extern "C" gxGlobals *gxg;

#endif /* globals_hpp */

—————————————

//  globals.cpp

#include "globals.hpp"

gxGlobals::gxGlobals():
    radius(24),
    easement(false)
    {};

———————————

//  main_file.cpp

#include "globals.hpp"

gxGlobals *gxg = new gxGlobals();

———————————

//  other_file.cpp

#include "globals.hpp"

// ERROR: Duplicate symbol gxGlobals::gxGlobals()

我可以在一个文件中包含globals.h,但不能包含两个或更多文件。如果我删除.cpp文件中的自我初始化,它也可以工作。

实际结构中有太多成员使初始化列表变得切实可行,所以我的最后一个选项是一个在启动时运行的函数,它插入了所有默认值。我误以为这个应该工作?

0 个答案:

没有答案