Programm aus mehreren Dateien lässt sich nicht kompilieren!



  • Ich grüße Euch,

    ich möchte einen taschenrechner Programmieren mit sehr vielen Funktionen.
    Diese Funktionen lagere ich wegen der Übersichts in mehrere extra Dateien aus.

    Und hier kommt das Problem:

    Die einzellnen Datein lassen sich kompilerern, aber wenn ich sie auf dem 1 Blatt dem Kompiler vorstelle, erkennt er eine Datei nicht und kompiliert das Programm nicht.

    Ich hab keinen Plan was falsch ist!

    Hier könnt ihr euch mal meine Fehlermeldung ansehen:

    http://bildupload.sro.at/a/images/4-fehler.JPG

    Die Quellcodes sehen wie folgt aus:

    //Kompletter Taschenrechner - Taschenrechner.cpp
    #include <iostream>
    #include <cstdlib>
    
    #include "Funktionen.cpp"
    #include "Funktionen_Prozent.cpp"
    
    using namespace std;
    
    //Funktionen
    void FunkAddition(double Sum1, double Sum2);
    void FunkSubtrahieren (double Sum1, double Sum2);
    void FunkMultiplikation (double Sum1, double Sum2);
    void FunkDivision (double Sum1, double Sum2);
    
    void FunkProzent();
    
    int main()
    {
      //Variablen deklaration
      int menue_eingabe;
      double Sum1, Sum2, ergebnis; //alle Variablen für die Grundrechenarten
      char wiederholung; 
    
      do { //Anfang der Schleife für das spätere wiederholen
    
      //Benutzer nach Rechenart fragen - Menü
      cout << "Was wollen Sie berechnen?" << endl;
      cout << endl;
      cout << " Menue" << endl;
      cout << "   Addieren            (1)" << endl;
      cout << "   Subtrahieren        (2)" << endl;    
      cout << "   Multiplikation      (3)" << endl;
      cout << "   Division            (4)" << endl;
      cout << endl;
      cout << "   Prozentrechnung     (5)" << endl;
      cout << endl; 
      cout << "   Programm beenden    (0)" << endl;
      cout << endl;
      cout << "   Hilfe               ()" << endl; 
      cout << endl;
    
      //Abfrage der Tasteneingabe
      cout << "Ihre Eingabe: ";
      cin >> menue_eingabe;  
    
          //Programm reagiert auf Eingabe des Benutzers 
          switch(menue_eingabe)
          {
                case 1: FunkAddition(Sum1, Sum2);
                        break;
                case 2: FunkSubtrahieren(Sum1, Sum2);
                        break;
                case 3: FunkMultiplikation(Sum1, Sum2);
                        break;
                case 4: FunkDivision(Sum1, Sum2);
                        break;
    
                case 5: FunkProzent();
                        break;
    
                case 0: cout << "Programm wird beendet!" << endl;
                        break;
    
                default: cout << "Ungueltige Eingabe!" << endl;
                         cout << endl;
    
       } // Ende der switch Verzweigung
    
       cout << endl;
       cout << "Nochmal? (j/n)" << endl;
       cin >> wiederholung;
    
       system("cls");     
    
      } // Ende der do-Schleife
    
       while (wiederholung == 'j'); 
    
      system("PAUSE");   
      return 0;
    
    } //Ende der main Methode
    

    Der 2.:

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    //Funktion zur Addition wird erstellt
    void FunkAddition(double Sum1, double Sum2)
    {
        cout << "Summand 1 = ";
        cin >> Sum1;
        cout << "Summand 2 = ";
        cin >> Sum2;
        cout << endl;
        cout << "Das Ergebnis ist " << Sum1+Sum2 << endl;
    }
    
    //Funktion zur Subtraktion wird erstellt
    void FunkSubtrahieren(double Sum1, double Sum2)
    {
        cout << "Summand 1 = ";
        cin >> Sum1;
        cout << "Summand 2 = ";
        cin >> Sum2;
        cout << endl;
        cout << "Das Ergebnis ist " << Sum1-Sum2 << endl;
    }
    
    //Funktion zur Multiplikation wir erstellt
    void FunkMultiplikation(double Sum1, double Sum2)
    {
        cout << "Summand 1 = ";
        cin >> Sum1;
        cout << "Summand 2 = ";
        cin >> Sum2;
        cout << endl;
        cout << "Das Ergebnis ist " << Sum1*Sum2 << endl;       
    } 
    
    //Funktion zur Division wird erstellt
    void FunkDivision(double Sum1, double Sum2)
    {
        cout << "Summand 1 = ";
        cin >> Sum1;
        cout << "Summand 2 = ";
        cin >> Sum2;
        cout << endl;
        cout << "Das Ergebnis ist " << Sum1/Sum2 << endl;       
    }
    
    //Funktion für die Prozentrechnung
    void FunkProzent()
    {
        int ziffern_eingabe;
        double G, W, p;
    
        system("cls");
    
        //Auswahlmenü der Prozenrechnunsart
        cout << "Grundgleichung: (G/100) = (W/p)" << endl; 
        cout << endl;
        cout << "Was suchen Sie?" << endl;
        cout << endl;
        cout << "Grundwert    (1)" << endl;           
        cout << "Prozentwert  (2)" << endl;
        cout << "Prozentzahl  (3)" << endl;
        cout << endl;
        cout << "Ihr gesuchter Wert: ";
        cin >> ziffern_eingabe; 
    
            //Programm reagiert auf die Eingabe des Nutzers
            switch(ziffern_eingabe)
            {
    
                //Der Grundwert G wird ermittelt
                case 1: cout << endl;
                        cout << "Gesucht ist der Grundwert G";
                        cout << endl;
                        cout << "Prozentwert W = ";
                        cin >> W;
                        cout << endl;
                        cout << "Prozentzahl p = ";
                        cin >> p; 
                        cout << endl;
    
                        cout << "Der Grundwert G: " << (W*100)/p << endl;
                        break;
    
                //Der Prozentwert W wird ermittelt       
                case 2: cout << endl;
                        cout << "Gesucht ist der Prozentwert W:";
                        cout << endl;
                        cout << "Prozentzahl p = ";
                        cin >> p;
                        cout << endl;
                        cout << "Grundwert G = ";
                        cin >> G; 
                        cout << endl;
    
                        cout << "Der Prozentwert W: " << (p*G)/100 << endl;
                        break;
    
                //Der Die Prozentzahl p wird ermittelt
                case 3: cout << endl;
                        cout << "Gesucht ist die Prozentzahl p";
                        cout << endl;
                        cout << "Prozentwert W = ";
                        cin >> W;
                        cout << endl;
                        cout << "Grundwert G = ";
                        cin >> G; 
                        cout << endl;
    
                        cout << "Die Prozentzahl p: " << (W*100)/G << endl;
                        break;
    
                default: cout << "Ungueltige Eingabe!" << endl;
                         cout << endl;   
    
            } //Ende der Switch Verzweigung
    
    } //Ende der FunktProzent
    

    Und der letze:

    #include <iostream>
    #include <cstdlib>
    using namespace std;
    
    //Funktion für die Prozentrechnung
    void FunkProzent()
    {
        int ziffern_eingabe;
        double G, W, p;
    
        system("cls");
    
        //Auswahlmenü der Prozenrechnunsart
        cout << "Grundgleichung: (G/100) = (W/p)" << endl; 
        cout << endl;
        cout << "Was suchen Sie?" << endl;
        cout << endl;
        cout << "Grundwert    (1)" << endl;           
        cout << "Prozentwert  (2)" << endl;
        cout << "Prozentzahl  (3)" << endl;
        cout << endl;
        cout << "Ihr gesuchter Wert: ";
        cin >> ziffern_eingabe; 
    
            //Programm reagiert auf die Eingabe des Nutzers
            switch(ziffern_eingabe)
            {
    
                //Der Grundwert G wird ermittelt
                case 1: cout << endl;
                        cout << "Gesucht ist der Grundwert G";
                        cout << endl;
                        cout << "Prozentwert W = ";
                        cin >> W;
                        cout << endl;
                        cout << "Prozentzahl p = ";
                        cin >> p; 
                        cout << endl;
    
                        cout << "Der Grundwert G: " << (W*100)/p << endl;
                        break;
    
                //Der Prozentwert W wird ermittelt       
                case 2: cout << endl;
                        cout << "Gesucht ist der Prozentwert W:";
                        cout << endl;
                        cout << "Prozentzahl p = ";
                        cin >> p;
                        cout << endl;
                        cout << "Grundwert G = ";
                        cin >> G; 
                        cout << endl;
    
                        cout << "Der Prozentwert W: " << (p*G)/100 << endl;
                        break;
    
                //Der Die Prozentzahl p wird ermittelt
                case 3: cout << endl;
                        cout << "Gesucht ist die Prozentzahl p";
                        cout << endl;
                        cout << "Prozentwert W = ";
                        cin >> W;
                        cout << endl;
                        cout << "Grundwert G = ";
                        cin >> G; 
                        cout << endl;
    
                        cout << "Die Prozentzahl p: " << (W*100)/G << endl;
                        break;
    
                default: cout << "Ungueltige Eingabe!" << endl;
                         cout << endl;   
    
            } //Ende der Switch Verzweigung
    
    } //Ende der FunktProzent
    

    Kann mir jemand helfen?! 😞 😞 😞



  • Als erstes:

    Die .cpp werden NICHT eingebunden!

    Was du ev. einbinden musst sind die header mit den Prototypen.



  • Mal ganz davon abgesehen, dass man Quellcodedateien nicht mit Includedirektiven einbindet: Ist dir nicht aufgefallen, dass die Funktion FunkProzent zweimal in deinem Code auftaucht?



  • drakon schrieb:

    Als erstes:

    Die .cpp werden NICHT eingebunden!

    Was du ev. einbinden musst sind die header mit den Prototypen.

    Oha... wie macht man das dann?!



  • Das macht der linker der IDE für dich, solange sie im gleichen Projekt sind..



  • So... das erste PRoblem hab ich gelöst!

    Danke MFK, das habe ich mal total übersehen! Nun klappt das auch zu kompilieren!

    Aber nun die nächste frage, wie muss ich die einbinden, sodass die zusammen kompiliert werden?!

    Ist es denn so schlimm wenn man die .cpp's mit einincludiert?!



  • Na, wenn du die .cpp - Dateien mehrmals einbindest, wird der Code auch mehrmals eingebunden, was nicht erlaubt ist. Eine Definition darf nur 1 mal vorkommen.

    Einbinden tut das normalerweise die IDE, wenn du die Dateien alle zu einem Projekt zugefügt hast. Also musst du nichts angeben im Code.
    Wichtig ist einfach, dass du die .h - Dateien eibindest, da die Prototypen wichtig sind.



  • Ah!

    Okay, aber wenn ich das mache, so wie du es mir sagst, bekomm ich nach dem kompilieren keine .exe, sondern folgende Fehlermeldung:

    http://bildupload.sro.at/a/images/6-fehler.JPG



  • Naja, ich arbeite mit VC++. Kenne DevC++ nicht. 😉

    Machs einfach so, wies gegangen ist.



  • drakon schrieb:

    Machs einfach so, wies gegangen ist.

    Lol...

    Mal sehen, vielleicht findet es ein anderer, der mir helfen kann...



  • Danke MFK, das habe ich mal total übersehen! Nun klappt das auch zu kompilieren!

    Bin davon ausgegangen, dass es jetzt funktioniert.

    Also bei mir läuft das Programm, wenn ich FunkProzent und die includes der .cpp weglasse, wie wir hier bereits gesagt haben.



  • Bei mir irgendwie net... wenn ich ein projekt habe, kommt halt diese MEldung...



  • die *.cpp Dateien müssen alle kompiliert werden, und die funktionen müssen überall dort, wo sie verwendet werden (also in main.cpp) deklariert sein. definiert dürfen sie nur einmal im gesamten programm sein.

    alles, was über diese information hinausgeht, ist nicht mehr C++-spezifisch sondern hängt von deinem compiler bzw. deiner IDE ab.
    wenn du hier keine antwort findest, wird dich wohl jemand in das alternative IDE-forum verschieben müssen.



  • Okay, ich hab das Problem noch mal extra im IDE Topic gepostet!
    ich denke die sache hier hätte sich dann erledigt!

    Danke für eure Hilfe!



  • Hallo,

    Du musst ein leeres Projekt erstellen, und dann via "dem projekt hinzufügen" die cpp dateien zuordnen. Danach einfach kompilieren klicken. Wichtig: Einen anderen Projektnamen ausprobieren.

    btw: Guck dir mal Code::Blocks an, dass ist eine Art modernes Dev-Cpp (mit ohne Bugs)... 😉


Anmelden zum Antworten