cpp oder h oder wie ist es ?



  • hallo,
    Bin an dem Punk gekommen wo mein Quelltext zu gross wird und ich will
    mein Code in cpp oder h dateien verteilen.
    Dacher ist meine Frage:
    Wo deklariere ich funktionen wo ich die Definiere.
    Wo schreibe ich includes und using namespace std.
    Gründsezlich geht es mir um funktionen, mit classen bin ich nicht so weit,
    PS: habe so um die 20 funktionen und 30 var's.



  • w81 schrieb:

    Dacher ist meine Frage:
    Wo deklariere ich funktionen wo ich die Definiere.

    Das steht in jedem guten C++ Buch oder C++ Tutorial.

    w81 schrieb:

    Wo schreibe ich includes

    Kommt draufan.

    w81 schrieb:

    und using namespace std.

    Nirgends.



  • Wenn du schon

    using namespace std;
    

    anwenden willst, setze das möglichst nur in die .cpp wo du das brauchst.

    Bei selbst geschriebenen .h-Dateien an "Include Guards" denken.

    Und zu deinen anderen Fragen gibt es hier im Forum verschiedene Auffassungen.

    MfG f.-th.



  • w81 schrieb:

    Wo deklariere ich funktionen wo ich die Definiere.

    In eine Header-Datei kommen nur Deklarationen, Definitionen haben hier nichts verloren (natürlich abgesehen von Klassen, Aufzählungen und Templates).

    w81 schrieb:

    Wo schreibe ich includes.

    Falls möglich, benutzt du in der Header-Datei Vorwärtsdeklarationen, und in der cpp-Datei #include .
    Eine Vorwärtsdeklaration ist dann möglich, wenn der entsprechende Datentyp nur bei Zeigern, Referenzen, Funktionsdeklarationen und/oder friend vorkommt, ansonsten brauchst du ein #include .
    Wichtig: Eine Vorwärtsdeklaration, die sich auf typedef bezieht, ist nicht möglich. D.h. in solch einem Fall brauchst du auch ein #include . Bsp.:

    class std::string; // Vorwärtsdeklaration funktioniert nicht...
    #include <string> // ...man muss es leider so machen.
    

    w81 schrieb:

    Wo schreibe ich using namespace std.

    Das kommt auf keinen Fall in eine Header-Datei, und eigentlich auch nicht in eine cpp-Datei, da es keinen Sinn macht, einen Namensraum zu definieren, nur um ihn dann wieder mit einer using-Direktive auszuleeren. Der viel wichtigere Grund ist aber, dass, wenn du es in einer Header-Datei schreibst, den Namensraum für alle Dateien irreversibel offenlegst, die diese Header-Datei inkludieren, wodurch du schnell Namenskonflikte bekommen kannst. Ok ist es, wenn du den Namensraum höchstens mal für einen bestimmten lokalen Scope öffnest, z.B. in der main-Funktion.




Anmelden zum Antworten