У меня есть файл заголовка abc.h, в котором я хочу определить константу с внешней связью. Таким образом, он содержит заявлениеextern const in C++
--------------- abc.h ----------------------- -
extern const int ONE = 1;
Далее у меня есть main.cpp, где я хочу использовать значение ONE. Таким образом, я объявляю ONE в main.cpp перед его использованием как
--------------- main.cpp --------------- ------
extern const int ONE;
int main()
{
cout << ONE << endl;
}
Я получаю сообщение об ошибке «Несколько определений ONE».
Вопрос: как я могу объявить константу с внешней связью и использовать ее впоследствии в разных файлах, так что есть только одно место для памяти для константы, а не для каждого файла, содержащего статическую версию константы.
Я удалил #include "abc.h" из main.cpp, и все работает.
г ++ abc.h main.cpp -o Основной
адрес одного это то же самое в заголовке и основной. Так оно и работает.
Но я не понимаю, как компилятор разрешает определение ONE без включать заявление в main.cpp
Похоже, что г ++ делает некоторые магии. Это плохая практика, когда читатель main.cpp не знает, где объявляется ONE, поскольку в main.cpp нет «abc.h»?
Что 'first'? –
мой плохой, удаленный первый – Jimm
У вас есть 'extern' в обоих местах? (Код, который у вас выше, скомпилирован для меня). Кроме того, проверьте [Mixing extern и const] (http://stackoverflow.com/questions/2190919/mixing-extern-and-const). –