Использование структуры 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.

В фактической структуре слишком много членов, чтобы сделать список инициализаторов практичным, поэтому мой последний вариант - это функция, которая запускается при запуске и включает все значения по умолчанию. Я ошибаюсь, что это должно работать?

0 ответов

Другие вопросы по тегам