Wie inkludiert man richtig?
-
Hallo,
Ich habe ein Projekt mit etwa 20 Klassen, die sich oftmals gegenseitig benötigen. Um Problemen aus dem Weg zu gehen, habe ich vorerst (fast) alle Headerfiles der Klassen einfach in die stdafx.h inkludiert, so daß die Headerfiles meiner Klassen nur noch die stdafx.h inkludieren. Mit Inklude-Wächtern und einigen Forward-Deklarationen funktioniert das problemlos, nur daß ich eben den Vorteil der vorkompilierten Header-Dateien ein wenig verspiele.
Aber wenn ich anfange die Includes auf die einzelnen Headerdateien zu verteilen, die sie benötigen, erhalte ich seltsame Fehler wie z.B. Neudefinitionen von Klassen, obwohl diese durch Inklude-Wächter geschützt sind...
Daher meine Frage in kurz: Wie inkludiert man 'richtig'?
Was gehört in die stdafx.h?
Ist es üblich, andere Headerfiles nur in der CPP-Datei zu inkludieren und dafür in der entsprechenden H-Datei nur Forward-Deklarationen zu nutzen?
Ich vermute, daß es schon Richtlinien gibt, ich finde sie aber einfach nicht...Grüße,
Hirsch
-
Einfach gesagt: includiere nur das, was an der jeweiligen Stelle unbedingt gebraucht wird. Alles in stdafx.h zu schmeißen ist zwar bequem, aber sicher nicht der beste Weg.
Aber wenn ich anfange die Includes auf die einzelnen Headerdateien zu verteilen, die sie benötigen, erhalte ich seltsame Fehler wie z.B. Neudefinitionen von Klassen, obwohl diese durch Inklude-Wächter geschützt sind...
Siehe oben. Includiere in Headern nur das, was du wirklich für die Schnittstellenbeschreibung brauchst und trenne sauber Definition und Implementierung, dann sollte es i.d.R. keine Probleme geben. In den meisten Fällen kannst du selbst dort einiges sparen (auch Komiplezeit) wenn du möglichst viel Forward-deklarierst -> such mal nach PIMPL-idiom.