Есть несколько переменных, которые записаны во всех файлах программы, но я хочу, чтобы они все были в одном отдельном файле config.h, которые должен подключаться ко всем файлам. Я пробовал эксперементировать с extern, объявлял в начале config.h спец переменную, чтобы исключить повторение объявлений переменных:
build/settingsdialog.o:(.bss+0x18): multiple definition of `HOME_PATH'
build/mainwidget.o:(.bss+0x18): first defined here
build/settingsdialog.o:(.bss+0x14): multiple definition of `TrDir'
build/mainwidget.o:(.bss+0x14): first defined here
Определения переменных бывают, и бывают объявления переменных. Так вот, объявить их надо в конфиг.х, а определить в cpp и скомпилировать в модуль .о, который слинковать со всем остальным. В конфиг.х они соотв-но объявляются как экстрен.
"Экстерн" - переменная "где-то вне" данного модуля компиляции, и ее адрес, определение, проч будет соотнесено на этапе линковки.
Определения переменных бывают, и бывают объявления переменных. Так вот, объявить их надо в конфиг.х, а определить в cpp и скомпилировать в модуль .о, который слинковать со всем остальным. В конфиг.х они соотв-но объявляются как экстрен.
"Экстерн" - переменная "где-то вне" данного модуля компиляции, и ее адрес, определение, проч будет соотнесено на этапе линковки.
src/config.cpp:4: error: expected constructor, destructor, or type conversion before ‘=’ token
src/config.cpp:6: error: expected constructor, destructor, or type conversion before ‘=’ token
src/config.cpp:8: error: expected constructor, destructor, or type conversion before ‘=’ token
Ошибку я понимаю, но не создавать же мне целый класс!
src/config.cpp:4: error: expected constructor, destructor, or type conversion before ‘=’ token
src/config.cpp:6: error: expected constructor, destructor, or type conversion before ‘=’ token
src/config.cpp:8: error: expected constructor, destructor, or type conversion before ‘=’ token
Ошибку я понимаю, но не создавать же мне целый класс!
Ну а тип имени-то кто компилятору подсказывать должен??
Ошибку я понимаю, но не создавать же мне целый класс!
Так у тебя же инициализация, это вызов конструктора класса. А откуда компилятор узнает код конструктора? Надо описание класса вставить в .h файл, и этот файл пихать везде, где используется этот класс(в т.ч. и там, где записаны методы этого класса) Пример надо?
Глобальные переменные тоже описываешь в .h файлах с extern. К примеру посмотри как это сделано в <errno.h> Но там тип int, знакомый компилятору. С твоими типами тебе придётся самому ознакомить.
Ну а тип имени-то кто компилятору подсказывать должен??
Результат:
src/config.cpp:12: error: ‘QSrting’ does not name a type
src/config.cpp:15: error: ‘QSrting’ does not name a type
src/config.cpp:17: error: ‘QSrting’ does not name a type
Хедер соотв-но включаете во все те модули где есть ссылки на эту и прочие глобальные переменные...