Для майбутніх глядачів цього питання хочу зазначити, що вам слід уникати того, що пропонує monkey0506 .
Файли заголовків призначені для декларацій.
Файли заголовків збираються один раз для кожного .cppфайлу, який безпосередньо або опосередковано #includesїх, а код поза будь-якою функцією запускається при ініціалізації програми, перш ніжmain() .
Поклавши: foo::i = VALUE;у заголовок, foo:iбуде присвоєно значення VALUE(що б там не було) для кожного .cppфайлу, і ці призначення будуть відбуватися у невизначеному порядку (визначеному лінкером) перед main()запуском.
Що робити, якщо ми маємо #define VALUEінше число в одному з наших .cppфайлів? Це складеться чудово, і ми не зможемо знати, хто з них виграє, поки ми не запустимо програму.
Ніколи не виконуваний код в заголовок з тієї ж причини , що ви ніколи #includeв .cppфайл.
включіть охоронці (які, я погоджуюся, ви завжди повинні використовувати) захищають вас від чогось іншого: той самий заголовок непрямо #included кілька разів під час компіляції одного .cppфайлу