Pour les futurs spectateurs de cette question, je tiens à souligner que vous devriez éviter ce monkey0506 suggère.
Fichiers d'en-tête sont pour les déclarations.
Fichiers d'en-tête compilé une seule fois pour chaque fichier cpp qui, directement ou indirectement #inclut, et le code en dehors de toute fonction est exécutée lors de l'initialisation du programme, avant le main().
En mettant: "foo::i = VALEUR;" dans l'en-tête, foo:je vais être affectée la valeur de la VALEUR (quelle qu'elle soit) pour chaque fichier cpp, et ces affectations se produire dans une période indéterminée, afin (déterminé par l'éditeur de liens) avant le main() est exécutée.
Si nous #définir la VALEUR d'un nombre différent dans l'un de nos fichiers cpp? Compiler fine et nous n'avons aucun moyen de savoir qui gagne un jusqu'à ce que nous exécuter le programme.
Ne jamais mettre le code exécuté dans un en-tête pour la même raison que vous n'avez jamais #include d'un .fichier cpp.
inclure les gardes (qui je suis d'accord que vous devriez toujours utiliser) de vous protéger de quelque chose de différent: le même en-tête étant indirectement #inclus plusieurs fois lors de la compilation d'un seul .fichier cpp