Probleme mit modularisierung - was wo includen



  • Hi, ich weiß, es gibt da schon ein ähnliches Thema, aber ich dachte mir es ist besser, wenn ich mein Problem in einen eigenen post stecke, und nicht den anderen unübersichtlich mache...

    Mein Problem ist folgendes:
    Ich habe 3 Dateien: main.cpp, CID3v1.h und CID3v1.cpp.
    In der main.cpp werden natürlich nur die funktionen aufgerufen usw.
    In der CID3v1.h ist eine Klasse definiert, und in der Klasse ein paar funktionsprototypen.
    bsp.:

    class ID3_tag
    
    {
    ...
    
    public:
    
    ...
    int get_tag(char* szTargetString);
    int get_tag(int offset, char* szTargetString);
    ...
    
    };
    

    In CID3v1.cpp dann die definitionen:

    ...
    
    int ID3_tag::get_tag(char* szTargetString)
    {
    ...
    }
    
    ...
    

    So, nun habe ich irgendwo gelesen, dass man nur in der .cpp Datei den Header includen soll, und in dem Hauptprogramm dann auch nur den header includen soll, nicht die .cpp datei.
    Nur leider bekomme ich immer linker fehler, wenn ich von der main.cpp aus die funktion aufrufe.
    Wenn ich allerdings beide Dateien einbinde, dann funktioniert es.
    So, und jetzt bin ich völlig verwirrt, denn ich habe jetzt keine ahnung, was wo in welche datei gehört und welche datei was wie includen soll. Ich hab nämlich das gefühl, dass meine Lösung zwar funktioniert, aber nicht ganz "korrekt" ist.

    Wäre nett, wenn mir da jemand aus der Verwirrung helfen könnte.



  • Hallo,

    das mit dem Inkludieren hast du richtig verstanden. Worauf du allerdings
    achten musst ist, dass du auch alle .cpp-Dateien kompilierst und linkst. Du
    musst also alle .cpp-Dateien beim Erstellen deines Programmes angeben.

    gruss
    v R



  • Ach sooooo...
    Jetzt hab ichs kapiert. Ich hab mich schon gewundert, wie die Datei ins Programm reinkommt, wenn die nirgendwo includet wird.
    Aber sag mal, jetzt hab ich probleme die richtig zu linken und zu kompilieren.
    Ich benutze den g++ Compiler, wie wäre da z.B. der richtige befehl zum Kompilieren?



  • DrPhil_Guth schrieb:

    Ach sooooo...
    Jetzt hab ichs kapiert. Ich hab mich schon gewundert, wie die Datei ins Programm reinkommt, wenn die nirgendwo includet wird.
    Aber sag mal, jetzt hab ich probleme die richtig zu linken und zu kompilieren.
    Ich benutze den g++ Compiler, wie wäre da z.B. der richtige befehl zum Kompilieren?

    ohne gewähr:

    g++ test.cpp -o meineexedatei.exe
    


  • gut, dass das ohne gewähr war, denn
    1. exe dateien unter linux is nich (aber das ist eine kleinigkeit)
    und 2. das man nur eine cpp Datei kompilieren lässt, war ja der ursprüngliche Fehler. Ich bin jetzt draufgekommen (danke virtual Realisticer), dass man alle .cpp Dateien kompilieren muss.



  • Listing hat es bereits korrekt gesagt. Wenn du nun mehrere .cpp-Dateien hast,
    dann sieht das Ganze so aus:

    g++ file1.cpp [file2.cpp [filex.cpp [...]]] -o prgname
    

    gruss
    v R

    [edit]
    da warste schneller 🙂
    [/edit]



  • Jo, danke hat jetzt funktioniert. Jetzt hab ich zwar Probleme mit ein paar funktionsaufrufen, aber das gehört nicht in diesen Thread.
    Danke für die Hilfe.


Anmelden zum Antworten