Я получаю забавную множественную ошибку определения. Структура включения выглядит следующим образом:
MAIN -> VM -> BACKEND
Main включает в себя VM, который включает в себя Backend.
У меня три глобальных char *
указатели в бэкенде, и это члены, которые я получаю несколько ошибок определения.
Я получаю несколько определений в vm.cpp
, main.cpp
а также moc_vm.cpp
(Я использую Qt).
Я пытался объявить указатели как внешние в остальных источниках, но это не помогло. Все препроцессорные средства защиты установлены, и я не знаю, почему я получаю сообщение об ошибке, поскольку они явно определены только в одном месте …
Есть идеи?
РЕДАКТИРОВАТЬ: Это странно, я могу включить BACKEND в MAIN, и нет никаких проблем, только когда цепочка MAIN> VM> BACKEND, я получаю ошибки.
Определите их как внешние в заголовочном файле.
Определите их (не как внешние) один раз в одном файле cpp.
Вы должны быть в безопасности.
использование extern char *name;
а затем в одном из ваших .cpp файлов есть char *name = "Something";
,
Решается путем изменения указателей на статические, чтобы они не были связаны внешне. Они не доступны ни в каком другом источнике в любом случае. Так что, в конце концов, это была проблема со связью …