grundlegende Verständnisfrage: was gehört in welche Datei und wie wird eingebunden



  • Hi,

    irgendwie glaub ich, dass ich was vercheckt hab...
    Also:

    Klassendeklaration: hpp-Datei
    Klassen-Implementierung: cpp-Datei

    Dann also so:

    main.cpp

    #include "./class.hpp"
    
    int main()
    {
    ABC  myAbc;
    
    	myAbc.saySomething("du trauriger Hirsch");
    
    return 0;
    }
    

    class.hpp

    #include <iostream>
    #include <string>
    
    class ABC
    {
    public:
    	void saySomething(std::string);
    
    private:
    };
    

    class.cpp

    #include "./class.hpp"
    
    void ABC::saySomething(std::string text)
    {
    std::cout<<text<<std::endl;
    }
    

    Wenn ich aber dann mehrere hpp/cpp - Paare hab, wie werden die dann mit eingehängt?
    Alle *.hpp - Dateien in main.cpp includieren, obwohl die weiteren Klassen eigentlich nur
    in anderen Klassen benötigt werden?

    Zumindest hab ich grad irgendwie den Überblick verloren, obwohl ich nur eine Handvoll Dateien hab 😞

    mfg
    Martin

    PS:
    Wieso splittet man eigentlich Implementierung und Deklaration in 2 Dateien auf.
    Beides in einer Datei wär zumindest von meiner Sicht aus logischer...



  • Die Headderdateien includierst du einfach da wo du die entsprechenden Klassen benutzt, das gilt natürlich auch für die main.cpp. Ich würde mich in der cpp Datei auch nicht darauf verlassen das ein bestimmter Headder schon über die eigene Headderdatei eingebunden ist, nur um eventuelle Probleme zu vermeiden. Warum du die iostream in deinem Headder brauchst kann ich z.B. nicht erkennen.

    Das trennen passiert da du ja den Sourcecode nicht umbedingt bekanntgeben willst. Wenn du z.B. den string Headder includierst hast du da ja auch nur den Headder und nicht den Quellcode, den brauchst du ja auch garnicht. Der liegt ja schon in kompilierter Version vor und wird später vom Linker hinzugelinkt.

    Gruß
    Entyl Sa



  • Verwende bitte includeguards.
    Such dazu mal in der FAQ, ich denke dort etwas gesehen zu haben.

    MfG Max



  • Und falls du noch keine hast, füge unbedingt include-guards in die header ein. Sonst kannst du später massive Probleme bekommen.

    EDIT: *grml*



  • ok,
    danke


Anmelden zum Antworten