У меня возникла проблема с объявлением переменной extern. У меня есть куча .cpp файлов, содержащих определения структур:Внешняя переменная undefined
const System SystemA = {"A", 1, 2 ...}; //In A.cpp
const System SystemB = {"B", 1, 2 ...}; //In B.cpp
...
Эти файлы СРР только к серверу как простой способ добавления новых структур, а также искать для одного конкретного определения структуры легко. (так как у меня может быть 100 определений, и каждая из них является несколькими [50] строками кода).
Когда я пытаюсь использовать их в другом модуле компиляции (.cpp):
extern const System SystemA;
extern const System SystemB;
...
void InitStructs(){
SystemA.Init();
SystemB.Init();
...
}
Я просто undefined reference to SystemA
undefined reference to SystemB
, и так далее. Я делаю эту унифицированную инициализацию, потому что я выполнял инициализацию как статическую динамическую инициализацию в каждой системе system.cpp. Но это рискованно, так как порядок инициализации не гарантируется (фиаско порядка статической инициализации). Поэтому я получал ошибки сегментации в зависимости от порядка компиляции cpp.
Я перешел к этому подходу, но теперь он даже не компилирует .... Любая помощь?
Я отмечаю это как ответ, потому что на самом деле это объясняет, что C и C++ не совпадают. C по умолчанию используется extern, тогда как C++ по умолчанию статично для константных переменных. – DarkZeros