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