Wo ist der Fehler?
-
Hi,
ich habe folgende Aufgabe gegeben:
Finden Sie im Hauptprogramm die 2 Fehler:
#include <iostream> using namespace std ; class KONTO { private: float KONTOSTAND ; public: float WERT_AENDERUNG(float) ; float WERT_AENDERUNG(float, float); float KONTOSTAND_LESEN(void) ; } ; void KONTO::WERT_AENDERUNG(float EINGABE) { KONTOSTAND=KONTOSTAND + EINGABE ; } void KONTO:: WERT_AENDERUNG (float EINGABE, float Faktor) { KONTOSTAND=KONTOSTAND + (EINGABE * Faktor), } float KONTO::KONTOSTAND_LESEN(void) {return(KONTOSTAND);} void main() { KONTO TESTKONTO() ; int ALTERNATIVE=0 ; float WERT=0, Faktor=0 ; cout << "K O N T O V E R W A L T U N G \n" ; do { cout << "1 = KONTOSTAND AENDERN ohne Faktor\n" ; cout << "2 = KONTOSTAND AENDERN mit Faktor\n" ; cout << "3 = KONTOSTAND LESEN\n" ; cout << "0 = Ende der Aktion\n\n" ; cout << "Ihre Wahl:" ; cin >> ALTERNATIVE ; switch(ALTERNATIVE) { case 1: cout << "Neuer WERT:" ; cin>> WERT ; case 2: //Berechnung mit Faktor cout << "Neuer WERT :" ; cin >> WERT ; cout << "Faktor:" ; cin >> Faktor ; case 3: cout << "Aktueller WERT:" ; cout << TESTKONTO.KONTOSTAND_LESEN() << "\n\n" ; } } while(ALTERNATIVE) ; system("pause") ; } }Ich finde da allerdings irgendwie mehrere Fehler??
1. Zeile 12: Rückgabewert void ist falsch
2. Zeile 16: Rückgabewert void ist falsch
3. Zeile 23: main muss Rückgabewert int haben
4. Zeile 52: es handelt sich um eine Endlosschleife, weil kein Abbruchkriterium erfüllt ist?
5. Zeile 55: es ist eine schließende Klammer zu viel.P.S.: im switch - Case Zweig fehlen ja noch die Anweisungen und break, allerdings sollen diese hier unberücksichtigt bleiben.
Was sagt ihr dazu?
Vielen Dank!
Viele Grüße
-
1 und 2 sind wahrscheinlich als einen Fehler gezählt, weil es das gleiche Problem ist.
3 ist falsch, ja.4 ist kein Fehler. Es ist einfach eine do-while Schleife. Abbruch ist, wenn man 0 eingibt.
5 habe ich nicht kontrolliert, aber auf den ersten Blick scheint da wirklich eine zu viel zu sein.
-
Danke für die Hinweise.
In der Aufgabenstellung ist zuerst die Klasse gegeben, dann kommt die Aufgabe:
Finden Sie im folgenden Hauptprogramm 2 Fehler...
Dann dürfte ja eig. in der Klasse kein Fehler sein, zumindest soll dann später mit der korrigierten Version des Programms weitergearbeitet werden...
Vielleicht hat sich der Aufgabensteller nur vertan...Viele Grüße
Johannes
-
Uebrigens: Deine shift-Taste klemmt.
-
In Zeile 25 befindet sich eine illegale Funktionsdeklaration. (Klammern weg)
-
1. Zeile 12: Rückgabewert void ist falsch
2. Zeile 16: Rückgabewert void ist falschdie voids sind richtig!
die floats sind falsch!
-
#include <iostream> using namespace std ; class KONTO { private: float KONTOSTAND ; public: KONTO() {} // Stk KONTO(int val) : KONTOSTAND(val) {} // 2. Konstruktor, evtl. nützlich void WERT_AENDERUNG(float) ; // void, hier wird nur was berechnet void WERT_AENDERUNG(float, float); // s.o float KONTOSTAND_LESEN(void) ; } ; void KONTO::WERT_AENDERUNG(float EINGABE) { KONTOSTAND=KONTOSTAND + EINGABE ; } void KONTO:: WERT_AENDERUNG (float EINGABE, float Faktor) { KONTOSTAND=KONTOSTAND + (EINGABE * Faktor), } float KONTO::KONTOSTAND_LESEN(void) {return(KONTOSTAND);} int main() { KONTO TESTKONTO ; // Dann wohl doch ohne '()' int ALTERNATIVE=0 ; // Alternative ? Wohl eher Auswahl, aber zieml. egal float WERT=0, Faktor=0 ; cout << "K O N T O V E R W A L T U N G \n" ; do { cout << "1 = KONTOSTAND AENDERN ohne Faktor\n" ; cout << "2 = KONTOSTAND AENDERN mit Faktor\n" ; cout << "3 = KONTOSTAND LESEN\n" ; cout << "0 = Ende der Aktion\n\n" ; cout << "Ihre Wahl : " ; cin >> ALTERNATIVE ; /* Wo war hier deine tatsächliche Berechnung ? Außerdem sind die Fragen irreführend Der Benutzer gibt bei Funktion 1 schließlich ein zu addierenden Wert nicht einen neuen für den Kontostand ein Außerdem sehe ich keine breaks bei dir, -> Alles wird ausgeführt */ switch(ALTERNATIVE) { case 0 : cout << "Sie haben 0 eingegeben ! Das Programm wird beendet " << endl; break; case 1: cout << "Zu addierender WERT : " ; cin>> WERT ; TESTKONTO.WERT_AENDERUNG(WERT); break; case 2: //Berechnung mit Faktor cout << "Zu addierender WERT : " ; cin >> WERT ; cout << "Mit welchem Faktor : " ; cin >> Faktor ; TESTKONTO.WERT_AENDERUNG(WERT, Faktor); break; case 3: cout << "Aktueller WERT:" ; cout << TESTKONTO.KONTOSTAND_LESEN() << "\n\n" ; break; default : cout << " Bitte geben Sie entweder 0,1,2 oder 3 ein ! " << endl; } } while(ALTERNATIVE) ; cin.ignore(); // Buffer leeren cin.get(); // system("Pause"); lädt vielzuviel Ressourcen return 0; // Nicht unbedingt nötig, sollte aber trotzdem dabei stehen } // Ja, da war eine zuviel
-
erinnert mich an cobol

gewöhn dir an, die Methoden nicht in Blockbuchstaben zu schreiben.
Camel-case!
-
asdffdsa schrieb:
erinnert mich an cobol

gewöhn dir an, die Methoden nicht in Blockbuchstaben zu schreiben.
Camel-case!Das stimmt, find ich auch hässich, aber wenn er so gern coded dann soll erst tun .
-
wxSkip schrieb:
In Zeile 25 befindet sich eine illegale Funktionsdeklaration. (Klammern weg)
KONTO TESTKONTO() ;
wird zu
KONTO TESTKONTO ;
-
wxSkip schrieb:
wxSkip schrieb:
In Zeile 25 befindet sich eine illegale Funktionsdeklaration. (Klammern weg)
KONTO TESTKONTO() ;
wird zu
KONTO TESTKONTO ;Das trifft nicht auf mein Code zu, oder ? Schließlich habe ich ein Konstruktor mit void-Parameter.
Oder wieso erwähnst du das nochmal?
-
Felixxx schrieb:
wxSkip schrieb:
wxSkip schrieb:
In Zeile 25 befindet sich eine illegale Funktionsdeklaration. (Klammern weg)
KONTO TESTKONTO() ;
wird zu
KONTO TESTKONTO ;Das trifft nicht auf mein Code zu, oder ? Schließlich habe ich ein Konstruktor mit void-Parameter.
Oder wieso erwähnst du das nochmal?Ich erwähne es nochmal, weil du es noch nicht beseitigt hast
.
Wenn du einen void-Konstruktor hast, darfst du die Klammern nicht hinschreiben. Das sollte dir dein Compiler aber eigentlich selbst sagen.
-
wxSkip schrieb:
Felixxx schrieb:
wxSkip schrieb:
wxSkip schrieb:
In Zeile 25 befindet sich eine illegale Funktionsdeklaration. (Klammern weg)
KONTO TESTKONTO() ;
wird zu
KONTO TESTKONTO ;Das trifft nicht auf mein Code zu, oder ? Schließlich habe ich ein Konstruktor mit void-Parameter.
Oder wieso erwähnst du das nochmal?Ich erwähne es nochmal, weil du es noch nicht beseitigt hast
.
Wenn du einen void-Konstruktor hast, darfst du die Klammern nicht hinschreiben. Das sollte dir dein Compiler aber eigentlich selbst sagen.Wh00t ? Ich habe das nicht durch den compiler gejagt. Dachte echt nicht dass das so ist, aber wenn Du das sagst glaube ich das mal. Finde ich eigentlich komisch, wieso ist das so ?
-
Stell dir mal vor, du deklarierst diese Variable so global statt lokal... als was wird der Compiler das wohl interpretieren?
-
Lol, dumme Frage, macht natürlich Sinn.
class A {
//Whatever
}A a() -> Funktion.