Использование структуры globals в нескольких файлах.cpp и инициализация ее в конструкторе
Я знаю, что подобные вопросы задавались, но никто не решает эту проблему. Я хочу создать глобальную структуру и инициализировать ее значениями по умолчанию. Я реализовал это, как показано ниже, но проект не будет построен.
Я перепробовал все, что мог придумать, прежде всего перенести "внешнюю" декларацию *gxg
входить и выходить из защиты заголовка и изменять структуру на класс, но получить те же результаты: проект не будет построен из-за дублированных символов для конструктора globals. Он создается, если я не использую его более чем в одном файле.cpp или если я не включаю конструктор или деструктор в файл реализации структуры.
// 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.
В фактической структуре слишком много членов, чтобы сделать список инициализаторов практичным, поэтому мой последний вариант - это функция, которая запускается при запуске и включает все значения по умолчанию. Я ошибаюсь, что это должно работать?