Для будущих читателей этого вопроса я хочу отметить, что вам следует избегать того, что предлагает monkey0506 .
Заголовочные файлы предназначены для объявлений.
Заголовочные файлы компилируются один раз для каждого .cpp
файла, который прямо или косвенно #includes
их использует, а код вне какой-либо функции запускается при инициализации программы раньше main()
.
Поместив: foo::i = VALUE;
в заголовок, foo:i
будет присвоено значение VALUE
(что бы это ни было) для каждого .cpp
файла, и эти назначения будут выполняться в неопределенном порядке (определенном компоновщиком) перед main()
запуском.
Что если мы #define VALUE
будем другим номером в одном из наших .cpp
файлов? Он будет хорошо скомпилирован, и мы не сможем узнать, кто из них победит, пока не запустим программу.
Никогда не помещайте исполняемый код в заголовок по той же причине, по которой вы никогда не #include
используете .cpp
файл.
включают в себя охранники (которые, я согласен, вы всегда должны использовать) защищают вас от чего-то другого: один и тот же заголовок косвенно используется #include
несколько раз при компиляции одного .cpp
файла