C++: Datei in Hauptprogramm einbinden



  • Hallo,

    ich will eine Datei (welche nur Quelltext enthält) in ein Programm einbinden.
    Der Übersichtlichkeit halber habe ich mal ein sehr einfachen Prog geschrieben.

    Hauptprogramm:

    #include <cstdlib>
    #include <iostream>
    #include C:\Dev-Cpp\Test\Datei-Einbinden\datei2.cpp
    
    using namespace std;
    
    int wert1;
    int wert2;
    
    int main()
    {
        test();
        cout << "\nHallo, eine Zahl eingeben: ";
        cin >> wert1;
        cout << "\nEingegeben: " << wert1;
        cin >> wert2;  
    }
    

    Einzubindende Datei:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    void test()
    {
        printf ("TEST"); 
    }
    

    Normalerweise müsste jetzt doch wenn ich das Programm ausführe auf der ersten Zeile stehen: TEST.

    Wenn ich das Prog compiliere, erscheinen folgende Fehler:

    3:10 C:\Dev-Cpp\Test\Datei-Einbinden\main.cpp | #include expects "FILENAME" or <FILENAME> 
         C:\Dev-Cpp\Test\Datei-Einbinden\main.cpp | In function `int main()': 
    12   C:\Dev-Cpp\Test\Datei-Einbinden\main.cpp | `test' undeclared (first use this function) 
                                                   (Each undeclared identifier is reported only once for each function it appears in.) 
         C:\Dev-Cpp\Test\Datei-Einbinden\Makefile.win | [Build Error]  [main.o] Error 1
    

    Was mache ich falsch?

    Wenn ich spitze Klammern um die Zeile 3. Zeile im Hauptprogramm mache (C:\Dev-Cpp\Test\Datei-Einbinden\datei2.cpp), erscheint folgendes:

    7 C:\Dev-Cpp\Test\Datei-Einbinden\datei2.cpp | multiple definition of `test()'
    




  • Hallo,

    Was mache ich falsch?

    Einiges...

    Ein Dateiname für #include steht in spitzen Klammern oder in Anführungszeichen(").

    Es werden keine .cpp-Dateien #included, sondern .h-Dateien (die zusätzlich zur .cpp-Datei erstellt werden), in denen z.B. Funktionen wie hier Test deklariert werden:

    datei2.h:

    // enthält hier nur eine Zeile
    void test();
    

    Und diese Datei wird #included. Da in datei2.h nur deklariert, aber nicht definiert (das passiert in datei2.cpp) wird, gibt es auch keine "multiple definition of `test()" in main.cpp

    MfG,

    Probe-Nutzer



  • Hallo,

    vielen Dank für die (ausführliche) Antworten 🙂

    Wo finde ich denn die .h Datei?
    Im Ordner, wo ich die Datei abgespeichert habe, finde ich bloß eine .cpp und .o Datei.

    (btw., verwende Dev-C++ 4.9.9.2)



  • $h4rk schrieb:

    Hallo,

    vielen Dank für die (ausführliche) Antworten 🙂

    Wo finde ich denn die .h Datei?
    Im Ordner, wo ich die Datei abgespeichert habe, finde ich bloß eine .cpp und .o Datei.

    (btw., verwende Dev-C++ 4.9.9.2)

    Die schreibst normalerweise du selber. Das ist der Header zu den Definitionen. Also die Klassendeklaration.

    // bla.h (deklaration)
    class foo{
    void init ();
    void exit ();
    ...
    };
    
    //bla.cpp (implementierung)
    
    foo::init (){
    }
    
    foo::exit (){
    }
    


  • Wenn keine Header-Datei dabei ist, erstelle sie einfach schnell selber in Dev-C++.

    MfG,

    Probe-Nutzer



  • Perfekt Leute, vielen Dank, es funktioniert wunderbar 🙂 👍



  • btw: ich empfehle dir außerdem noch einen aktuellen Compiler/IDE zu benutzen. Bsp: "Visual Studio C++ 2008 Express"(kostenlos) oder CodeBlocks (sogar Open Source 😉 ) denn Dev-C++ ist "mit Vorsicht" zu genießen 😉



  • übrigens:

    du scheinst ja nen ganzen ordner mit dateien zu haben, die du ab und an includieren willst...

    jedes ma so was zu schreiben
    #include "C:\\Dev-Cpp\\Test\\Datei-Einbinden\\datei2.cpp"
    is doch echt 1. sackgang 2. ne gerad übersichtlich...

    wie wärs, wenn du
    C:\Dev-Cpp\Test\Datei-Einbinden
    als includepfad hinzufügst?

    dann musst du nur noch
    #include "datei2.cpp" schreiben (mal abgesehen davon, dass man halt keine *.cpp`s includieren sollte...)

    bb ^^


Anmelden zum Antworten