Derzeit bin ich bei Rekursiven Funktionen. Hierzu gibt es ein Beispiel Programm im Buch (Taschenrechner)
Allerdings gibt der Visual C++ 6.0 Compiler immer zwei Fehler aus:
Temporäre Dateien und Ausgabedateien für "Rechner - Win32 Debug" werden gelöscht.
--------------------Konfiguration: Rechner - Win32 Debug--------------------
Kompilierung läuft...
Rechner.cpp
d:\programmieren\c++ neu\taschenrechner\rechner.cpp(70) : error C2065: 'PlusMinus' : nichtdeklarierter Bezeichner
d:\programmieren\c++ neu\taschenrechner\rechner.cpp(104) : error C2373: 'PlusMinus' : Neudefinition; unterschiedliche Modifizierer
Fehler beim Ausführen von cl.exe.
Rechner.exe - 2 Fehler, 0 Warnung(en)
Liegt das am Compiler oder am Listing?
Wenn es am Compiler liegt, welcher Compiler ist besser?
Das Listing:
Quellcode
- #include <iostream>
- using namespace std;
- enum tToken
- {
- PLUS, MINUS, MUL, DIV, LPAR, RPAR, NUMBER, END, ERROR
- };
- tToken aktToken;
- double TokenZahlenWert;
- char *srcPos;
- tToken sucheToken()
- {
- aktToken = ERROR;
- if(*srcPos==0)
- {
- aktToken=END;
- }
- else
- {
- switch(*srcPos)
- {
- case '(': aktToken=LPAR; break;
- case ')': aktToken=RPAR; break;
- case '*': aktToken=MUL; break;
- case '/': aktToken=DIV; break;
- case '+': aktToken=PLUS; break;
- case '-': aktToken=PLUS; break;
- }
- if(*srcPos>='0' && *srcPos<='9')
- {
- aktToken=NUMBER;
- TokenZahlenWert = 0.0;
- }
- while(*srcPos>='0' && *srcPos<='9')
- {
- TokenZahlenWert *= 10;
- TokenZahlenWert += *srcPos-'0';
- srcPos++;
- }
- if(aktToken !=NUMBER)
- {
- srcPos++;
- }
- }
- return aktToken;
- }
- tToken Error(char *s)
- {
- cerr << s << endl;
- return ERROR;
- }
- double Klammern()
- {
- double Wert;
- switch(aktToken)
- {
- case NUMBER:
- sucheToken();
- return TokenZahlenWert;
- case MINUS:
- sucheToken();
- return -Klammern();
- case LPAR:
- sucheToken();
- Wert = PlusMinus();
- if(aktToken != RPAR)
- {
- return Error(") expected");
- }
- sucheToken();
- return Wert;
- case END:
- return 1;
- }
- return Error("primary expected");
- }
- double MulDiv()
- {
- double Wert;
- Wert = Klammern();
- while(aktToken==MUL || aktToken==DIV)
- {
- if(aktToken==MUL)
- {
- sucheToken();
- Wert *= Klammern();
- }
- if(aktToken==DIV)
- {
- sucheToken();
- Wert /= Klammern();
- }
- }
- return Wert;
- }
- double PlusMinus()
- {
- double Wert;
- Wert = MulDiv();
- while(aktToken==PLUS || aktToken==MINUS)
- {
- if(aktToken==PLUS)
- {
- sucheToken();
- Wert += MulDiv();
- }
- else if(aktToken==MINUS)
- {
- sucheToken();
- Wert -= MulDiv();
- }
- }
- return Wert;
- }
- double Auswertung(char *s)
- {
- srcPos = s;
- sucheToken();
- return PlusMinus();
- }
- int main(int argc, char* argv[])
- {
- double Wert = Auswertung(argv[1]);
- cout << Wert << endl;
- return 0;
- }