wie funktioniert das mit mehrere *.cpp files in einem Projekt?



  • Hallo,

    ich nutze dev-c++.

    die ganze zeit habe ich den kompletten quellcode immer in nur eine cpp geschrieben.

    nun möchte ich teile davon aber auslagern.
    dev-c++ bietet die möglichkeit in einem projekt mehrere files zu verbinden.

    wie übernehme ich jetzt aber variable z.B: chars von main.cpp nach test.cpp im gleichen projekt?
    derzeit kennt test.cpp weder die variable, noch den inhalt, der von main.cpp reingeschrieben wurde.

    könntet ihr mir da bitte weiterhelfen?
    würdet mir ein riesen gefallen tun - code würde extrems übersichtlicher 😉

    vielen dank
    Edwart



  • Relativ einfach, das hat nix mit dev-c++ sondern eher mit std c++ zu tun. Du hast ja Dateien mit der Endung .cpp. Dann gibt es noch Dateien mit der Endung .h. Dann solltest du auch wissen, dass es Prototypen gibt. Zu einer Funktion

    void mach_was_tolles()
    {
        //...
    };
    

    Würde der Prototyp z.B.

    void mach_was_tolles();
    

    heißen. Das geht so oder ähnlich mit allen Sprachelemnten in c++. Nun schreibst du die Prototypen in die header datei(en). In jeder .cpp wo du die Funktionen/... benutzen willst musst du die header mit den Prototypen einbinden. (Du kannst sie auch von Hand bekanntmachen, das ist aber umständlich...) In irgendeiner deiner .cpp Dateien muss aber die Implementation stehen, sonnst gibt es einen Linker-error.
    Beispiel:
    vorher:

    //main.cpp
    #include <iostream>
    using namespace std;
    
    int mach_was_tolles()
    {
        //...
    };
    
    char g='S';
    
    int main()
    {
        cout<<mach_was_tolles();
        cout<<g;
        return 0;    //Sonst gibt es och großes geschrei
    };
    

    Nachher:

    //mach_was_tolles.h
    #ifndef MACH_WAS_TOLLES_H
    #define MACH_WAS_TOLLES_H
    int mach_was_tolles();
    extern char g;
    #endif    //MACH_WAS_TOLLES_H
    
    //mach_was_tolles.cpp
    #include "mach_was_tolles.h"
    char g='S';
    
    int mach_was_tolles()
    {
        //...
    };
    
    //main.cpp
    #include <iostream>
    #include "mach_was_tolles.h"
    using namespace std;
    
    int main()
    {
        cout<<mach_was_tolles();
        cout<<g;
        return 0;    //dito
    };
    

    Ein paar Sachen noch:
    Die Präprozessoranweisungen #ifndef...#endif in der header Datei sorgen dafür, dass sie nicht 2x eingebunden wird. Das nennt man include.guard, das sollte man in jede header schreiben.
    Außerdem sollte man in headern keine using-Direktiven(z.B.:using namespace std;) benutzen.
    /edit: mal ganz davon abgesehen, das man keine globalen Variablen benutzen soll, habe ich das Beispiel jetzt trotzdem erweitert...



  • ahja,

    über die header files gehts also.. dachte das würde "irgendwie" von dev-c++ "übernommen" werden können.
    ok, werde das in header-files packen..

    DANKE



  • Ich weiß nicht, ob das noch was hilft und Spammen will ich bestimmt nicht ... aber ich hab n kleines Beispielprog zu geschrieben:

    http://sirnonamesplace.de/tutorials/tut_header_einbinden.htm

    Wenn sich das Prob erledigt hat betrachtet diesen Post als gegenstandslos 😃



  • das klappt wunderbar.. aber eins ist mir noch aufgefallen...

    ist es möglich aus einer anderen cpp das fenster (z.B. hEdit) aus main.cpp anzusprechen? geht das auch über die header?
    Falls ja, wie muss ich das dort angeben?

    vielen Dank
    Edwart



  • dann musst du main.cpp in die cpp einbinden!



  • per #include "main.cpp" ?

    da bekomm ich fehlermeldungen und es funktioniert nicht...



  • Edwart schrieb:

    per #include "main.cpp" ?

    da bekomm ich fehlermeldungen und es funktioniert nicht...

    es werden nur header includiert. wie ness es beschrieben hat.



  • argh, @miller_m, hast recht ^^
    main.h einbinden und beim compilieren z.b.

    g++ -s -xc++ src.cpp main.cpp -o src.exe
    

    dann hast du die main.cpp nämlich in der exe mit drin 🙂


Anmelden zum Antworten