Правильный способ - объявить переменную с ключевым словом extern в заголовочном файле, а затем объявить ее в одном (!) Файле cpp без ключевого слова extern.
Но:
Переменные в заголовочных файлах являются глобальными переменными.У них много проблем.Вот несколько:
- Вы не знаете, в каком порядке они инициализируются.Когда один является классом, и его конструктор обращается к другой глобальной переменной, возможно, эта другая глобальная переменная не инициализирована
- Глобальные переменные тратят ваше пространство имен
- Когда вы используете глобальные переменные, вы почтиконечно, не используйте хорошо известные и проверенные концепции программирования (например, модульность).Кроме того, ваши функции будут иметь много побочных эффектов, что делает ваш код сложным для понимания.Через несколько недель вы больше не будете знать, какие функции будут изменять какие переменные и так далее.Ваш код будет намного более читабельным и понятным, если вы будете придерживаться этой концепции и не будете использовать глобальные переменные.
Никогда не следует использовать глобальные переменные в C ++.Они существуют только для обратной совместимости с C.