Für künftige Betrachter dieser Frage möchte ich darauf hinweisen, dass Sie vermeiden sollten, was monkey0506 schlägt vor .
Header-Dateien sind für Deklarationen.
Header-Dateien werden einmal für jede .cpp
Datei, die direkt oder indirekt #includes
und Code außerhalb einer Funktion wird bei der Programminitialisierung ausgeführt, bevor main()
.
Durch das Setzen: foo::i = VALUE;
in die Kopfzeile, foo:i
wird der Wert VALUE
(was auch immer das ist) für jeden .cpp
Datei, und diese Zuweisungen erfolgen in unbestimmter Reihenfolge (vom Linker bestimmt) vor main()
ausgeführt wird.
Was wäre, wenn wir #define VALUE
eine andere Nummer in einem unserer .cpp
Dateien? Es wird sich gut kompilieren lassen, und wir werden nicht wissen können, welche Datei gewinnt, bis wir das Programm ausführen.
Fügen Sie niemals ausgeführten Code in eine Kopfzeile ein, aus dem gleichen Grund, aus dem Sie niemals #include
a .cpp
Datei.
Include Guards (die Sie meiner Meinung nach immer verwenden sollten) schützen Sie vor etwas anderem: der gleichen Kopfzeile, die indirekt #include
d bei der Kompilierung einer einzelnen .cpp
Datei.