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:
-
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)...