verständnis problem, bei übersetztung mehrerer module.



  • hallo,
    ich wollte mich mal schnell shclau machen mit der uebersetzung mehrerer module.
    und zwar:
    ich habe mir eine header "test.h" mit einer class test angelegt. dann hab ich mir eine cpp angelegt wo die klasse deklariert wurde. dann hab ich mir nen haupt modul gebaut maintest.cpp in der ich die .obj datei von test eingebuden habe. soweit ist ja auch alles ok läuft wunder ba, nur meine frage ist: in der test.cpp wo ich die klasse deklariert habe... musste ich die main() noch mit reinschreiben, da sonst der compiler meckert... da ich die main da ja net brauche kann man diese denn nicht irgendwie weglassen ohne das der compiler nen problem damit hat?

    Gruß Tobi.



  • test.h -> kein translationsmodul, enthält nur deklarationen

    #pragma once //verhindern von mehrfachem inkludieren der selben datei
    
    class test
    {
     void foo(); //deklaration
    };
    

    test.cpp -> translationsmodul 1: erzeugt test.obj
    enthält definition der methodenbodies
    kein main notwendig

    #include "test.h"
    
    void test::foo() //definition
    { //do something
    }
    

    main.cpp -> translationsmodul 2: erzeugt main.obj

    #include "test.h"
    
    int main(int, char**)
    {
     Foo f;
     f.test();
     return 0;
    }
    

    der compiler wird bei sowas keine probleme haben mit der trennung.
    durch die header ist das interface gegeben, in form von symbolnamen und funktionssignaturen.

    beim entgültigen linken könnte man falls man sowas händisch macht vergessen beide obj's zusammenzuführen, das könnte in einem linktime error ausarten.
    aber ich nehme an du arbeitest in ner IDE, dort sollte das automatisch passieren.



  • dummer fehler 🙂

    korrektur:

    #include "test.h"
    
    int main(int, char**)
    {
     test t;
     t.Foo();
     return 0;
    }
    


  • meinst du etwa, ich brauche für test.cpp gar kein neues project starten, sondern nur ein .cpp file erstellen?



  • T0bi schrieb:

    meinst du etwa, ich brauche für test.cpp gar kein neues project starten, sondern nur ein .cpp file erstellen?

    yup
    dein projekt sollte bestehen aus
    test.h
    test.cpp
    main.cpp



  • wenn ich dann also test.cpp abspeichere wird automaTISCH eine .obj angelegt?



  • probiers, wenn deine IDE das kann (können eh alle mit projektmanagment)
    dann passts, wenn nicht schreib was du für ne IDE verwendest.

    ich nehm mal an du kompilierst nicht per hand in der kommandozeile.


Anmelden zum Antworten