Fehlermeldung C2084 - Funktion hat bereits einen Funktionsrumpf
-
Hallo Leute,
wäre nett, wenn sich jemand mal meinen Code anschauen könnte.
Programm soll nachher römische Zahlen in arabische umwandeln.Bin noch Anfänger und bekomme im Visual Studio noch ein paar Fehlermeldungen

Vielen Dank im Voraus.
/* Programm zur Umwandlung einer römischen Zahl in eine arabische Zahl Fehler bei Sonderfällen behoben */ #include <cstdlib> #include <conio.h> #include <iostream> #include <string> #include <algorithm> using namespace std; /* ---------------------------------------------- ********************************************** DEKLARATIONEN DER FUNKTIONEN ********************************************** ---------------------------------------------- */ int toUpper (string *name); int controlString (string* name); int rom2Arab (string *name, int *zahl); int mainProgram (); int failure (); int newConvertation(); int end(); /* ---------------------------------------------- ********************************************** MAIN-FUNKTION ********************************************** ---------------------------------------------- */ int main() { mainProgram(); return 0; } /* ---------------------------------------------- ********************************************** DEFINTIONEN DER FUNKTIONEN ********************************************** ---------------------------------------------- */ int mainProgram() { string sRoemischeZahl = ""; int dArabischeZahl = 0; cout << "Geben Sie bitte Ihre roemische Zahl ohne Leerzeichen ein!\n" << "Erlaubt sind folgende Ziffern:\n" << "I - V - X - L - C - D - M\n" << "\n" << "Eingabe: "; cin >> sRoemischeZahl; system ("cls"); toUpper(&sRoemischeZahl); controlString(&sRoemischeZahl); rom2Arab(&sRoemischeZahl, &dArabischeZahl); newConvertation(); return 0; } int toUpper (string *name) { transform(name->begin(), name->end(), name->begin(), ::toupper); return 0; } int controlString (string *name) { unsigned int i = 0; while (i < name->length()) { if ((*name)[i] != 'I' && (*name)[i] != 'V' && (*name)[i] != 'X' && (*name)[i] != 'L' && (*name)[i] != 'C' && (*name)[i] != 'D' && (*name)[i] != 'M') { failure(); break; } else { i++; } } return 0; } int rom2Arab (string *name, int *zahl) { unsigned int i = 0; while (i < name->length()) { if ((*name)[i] == 'I' && (*name)[i+1] != 'V' && (*name)[i+1] != 'X') { (*zahl) += 1; i++; } else if ((*name)[i] == 'I' && (*name)[i+1] == 'V') { (*zahl) += 4; i+=2; } else if ((*name)[i] == 'V') { (*zahl) += 5; i++; } else if ((*name)[i] == 'I' && (*name)[i+1] == 'X') { (*zahl) += 9; i+=2; } else if ((*name)[i] == 'X' && (*name)[i+1] != 'L' && (*name)[i+1] != 'C') { (*zahl) += 10; i++; } else if ((*name)[i] == 'X' && (*name)[i+1] == 'L') { (*zahl) += 40; i+=2; } else if ((*name)[i] == 'L') { (*zahl) += 50; i++; } else if ((*name)[i] == 'X' && (*name)[i+1] == 'C') { (*zahl) += 90; i+=2; } else if ((*name)[i] == 'C' && (*name)[i+1] != 'D' && (*name)[i+1] != 'M') { (*zahl) += 100; i++; } else if ((*name)[i] == 'C' && (*name)[i+1] == 'D') { (*zahl) += 400; i+=2; } else if ((*name)[i] == 'D') { (*zahl) += 500; i++; } else if ((*name)[i] == 'C' && (*name)[i+1] == 'M') { (*zahl) += 900; i+=2; } else if ((*name)[i] == 'M') { (*zahl) += 1000; i++; } } cout << "Ihre roemische Zahl als arabische Zahl ergibt: " << *zahl << "\n\n"; return 0; } int failure() { cout << "Ihre Eingabe war ungueltig!\n\n"; newConvertation(); return 0; } int newConvertation() { char weiter; cout << "Moechten Sie noch eine Konvertierung durchfuehren?\n" << "(j/n)\n" << "Eingabe: "; weiter = getch(); if (weiter == 'j') { system("cls"); mainProgram(); } else { system("cls"); end(); } return 0; } int end() { cout << "Zum Beenden beliebige Taste druecken!\n"; getch(); return 0; }
-

Steht doch da:Habit schrieb:
...
... int main() { ... } ... int main() { ... }Fehlermeldungen
main.cpp(244): error C2084: Funktion 'int main(void)' hat bereits einen Funktionsrumpf ...Außerdem: Soweit ich mich erinnere, darf main() nicht "selbst" aufgerufen werden.
Lösung:
1.) Unterschiedliche Funktionen bekommen unterschiedliche Namen und
2.) main() wird automatisch aufgerufen und sonst gar nicht.Tipp: Nutze für Sourcecode die cpp-Tags (nicht "code") - macht es Dir und uns leichter.
3 Pluspunkte vom mir:
- guter Threadtitel !
- Fehlermeldung dabei !
- Sourcecode dabei !

Gruß,
Simon2.
-
Du hast 2 x die main und 2 x toUpper in Deinem Code und bei den restlichen Funktionen das gleiche. Geht nicht...
-
Danke schonmal für eure Hilfe, das oben war wohl ein Kopierfehler

Ich habe mal im ersten Beitrag den Code editiert.Kann mir jemand vielleicht noch eine Frage beantworten, die mit der Funktion "controlString()" zusammenhängt?
Und zwar:
Ich vergleiche ja hier die Elemente meines Strings, in dem die römische Zahl steht, um bei einer falschen Eingabe eine Meldung auszugeben.
Das klappt alles auch so weit, nur nach dem das Programm dann diese Meldung ausgibt, fragt es noch nach einer neuen Konvertierung (auch gewollt). Nachdem ich dann 'n' für nein gedrückt habe wird die Funktion end() aufgerufen.
Aus mir nicht erklärlichen Gründen Funktioniert die Funktion getch() dort nicht.
Ich kann nicht mit einer Tastenkombination beenden...Komme ich nach einer geglückten Konvertierung zu end() funktioniert es...