Includes in Header, oder cpp-Datei?
-
Hi
Was ist eigentlich stillistisch schöner?
Includes in den Header, oder in die Cpp-Datei?
Sollte man Includes also verstecken, oder eher darauf aufmerksam machen, was man verwendet?
-
IMHO kommen die dort hin, wo sie gebraucht werden. Also,wenn du eine für die Definition brauchst, in die .h, sonst im in der .cpp.
-
wobei "gebraucht werden" auch noch interpretationsspielraum lässt. lieber ein oder zwei forward deklarationen im header, als windows.h zu includen

-
JustAnotherNoob schrieb:
Hi
Was ist eigentlich stillistisch schöner?
Includes in den Header, oder in die Cpp-Datei?
Sollte man Includes also verstecken, oder eher darauf aufmerksam machen, was man verwendet?Das hat eigentlich nichts mit stilistisch zu tun.
Du kannst die Linkzeiten in der Regel reduzieren wenn du vermeidest zuviele Includes im Header zu machen. Zudem vermeidest du Probleme wegen gegenseitigen Abhängigkeiten. Man kann etwa wie folgt vorgehen:
1. Wird etwas aus dem Header nur in der Sourcedatei (cpp) benötigt?
==> Include im Source
2. Werden im Header nur Zeiger und Referenzen eines im Header definierten Typs verwendet und Vorwärtsdeklarationen reichen für die Verwendung aus?
==> Include im Source, Vorwärtsdeklaration im Header
Sonst: ==> Include im HeaderDie Abhängigkeiten lassen sich meist noch mehr reduzieren wenn man das sogenannte Handle/Body Idiom verwendet (auch pImpl genannt), man sollte dabei aber zwischen Nutzen und Handhabung abwägen. Hierzu ist google dein Freund.
cu André
-
Ich hab auch eine Frage zum optimalen Includen, daher frag ich hier einfach mal:
Ich würde gern in den Headerfiles meiner Klassen gar kein Include haben und dafür nur einen Eintrag im entsprechenden Cpp-File.
Ich arbeite momentan beruflich mit einem Softwareprojekt, bei dem grundsätzlich in KEINER Headerdatei ein Include steht, und dennoch dort allerlei Klassen verwendet werden. Es gibt immer nur eine Headerdatei die alle Includes enthält, und entsprechend in der Cpp-Datei jeder Klasse included wird.
Wie krieg ich das bei mir hin? Irgendwie funzt das nicht... (beruflich VC++ 6.0, privat Code::Blocks)
danke schonmal

-
It0101 schrieb:
(beruflich VC++ 6.0, privat Code::Blocks)
Was hat die IDE damit zu tun?! Ich würde dich schonmal auf gar keinen Fall einstellen

-
It0101 schrieb:
Wie krieg ich das bei mir hin?
Was soll denn bei dir anders sein?
Du verschiebst eben die#include-Direktiven in den gemeinsamen Header. Wo liegt das Problem?P.S. VC++ 6.0 ist relativ veraltet...
-
Ich sollte nicht mehr erwähnen, dass ich mit VC++ 6.0 arbeite... kommen ja doch immer wieder die gleichen Sprüche. Ich kann doch nix dafür verdammt

Problem ist:
wenn ich nur in den CPP-Files include, kennt der Compiler im Headerfile meine ganzen "anderen Klassen" nicht mehr und macht das auch durch eine entsprechende Fehlermeldung deutlich.
@Niemals:
VC++6.0 ist in einigen Dingen sehr merkwürdig, daher wollte ich die IDE nur mal nebenbei erwähnt wissen, falls doch wieder VC6 schuld is...
-
It0101 schrieb:
wenn ich nur in den CPP-Files include, kennt der Compiler im Headerfile meine ganzen "anderen Klassen" nicht mehr und macht das auch durch eine entsprechende Fehlermeldung deutlich.
Vorwärtsdeklaration?
class CTest; class CMyClass { private: CTest* m_pTest; // Kein Problem // ... };Du kannst halt nur Pointer und Referenzen erstellen, aber keine Objekte. Und schon gar nichts im Header aufrufen. Aber das reicht meistens.
Grüssli
-
Habs hinbekommen. Die Reihenfolge im Include Headerfile war nicht ganz ok...