Hallo zusammen,
es scheint als hat sich in Kapitel 4, Listing 4.9 (Lösungsvorschlag zur Aufgabe in Kapitel 4) ein Fehler eingeschlichen. Ich poste mal den Code, den ich vom Buch abgetippt habe:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
// C++ für Spieleprogrammierer
// Listing 4.9
//
//
#include<iostream>
using namespace std;
int addProzent(int Wert, int Prozent);
float addProzent(float Wert, float Prozent);
// Hauptprogramm
//
int main()
{
// Variablen
//
int Staerke;
float Geschwindigkeit;
int Steigerung;
// Abfrage der Werte
cout << "Bisherige Staerke des Charakters: ";
cin >> Staerke;
cout << "Bisherige Geschwindigkeit des Charakters: ";
cin >> Geschwindigkeit;
cout << "Steigerung in Prozent: ";
cin >> Steigerung;
// Neue Werte berechnen
Staerke = addProzent(Wert, Prozent);
Geschwindigkeit = addProzent(Wert, Prozent);
// Ausgabe der neuen Werte
cout << "\nNeue Charakterwerte: " << endl;
cout << "Staerke: " << Staerke << endl;
cout << "Geschwindigkeit: " << Geschwindigkeit << endl;
return 0;
}
// addProzent (für Integer-Werte
//
int addProzent(int Wert, int Prozent)
{
int neuerWert;
neuerWert = Wert + (Wert * Prozent)/100;
return neuerWert;
}
// addProzent (für float-Werte
//
float addProzent(float Wert, float Prozent)
{
float neuerWert;
neuerWert = Wert + (Wert * Prozent)/100;
return neuerWert;
}
|
Mein Compiler spuckt (richtigerweise) folgende Fehlermeldungen aus:
Fehler 1 error C2065: 'Wert': nichtdeklarierter Bezeichner
Fehler 2 error C2065: 'Prozent': nichtdeklarierter Bezeichner
Fehler 3 error C2065: 'Wert': nichtdeklarierter Bezeichner
Fehler 4 error C2065: 'Prozent': nichtdeklarierter Bezeichner
Ich habe den Quellcode so angepasst, wie ich es für richtig halten würde, aber leider gibt das immer noch einen Fehler. Ich poste mal meine erste Korrektur (Änderungen sind kommentiert)
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
// C++ für Spieleprogrammierer
// Listing 4.9
//
//
#include<iostream>
using namespace std;
int addProzent(int Staerke, int Prozent); // Wert wurde durch Staerke ersetzt
float addProzent(float Geschwindigkeit, float Prozent); // Wert wurde durch Geschwindigkeit ersetzt
// Hauptprogramm
//
int main()
{
// Variablen
//
int Staerke;
float Geschwindigkeit;
int Prozent;
// Abfrage der Werte
cout << "Bisherige Staerke des Charakters: ";
cin >> Staerke;
cout << "Bisherige Geschwindigkeit des Charakters: ";
cin >> Geschwindigkeit;
cout << "Steigerung in Prozent: ";
cin >> Prozent;
// Neue Werte berechnen
Staerke = addProzent(Staerke, Prozent);
Geschwindigkeit = addProzent(Geschwindigkeit, Prozent);
// Ausgabe der neuen Werte
cout << "\nNeue Charakterwerte: " << endl;
cout << "Staerke: " << Staerke << endl;
cout << "Geschwindigkeit: " << Geschwindigkeit << endl;
return 0;
}
// addProzent (für Integer-Werte
//
int addProzent(int Staerke, int Prozent)
{
int neuerWert;
neuerWert = Staerke + (Staerke * Prozent)/100;
return neuerWert;
}
// addProzent (für float-Werte
//
float addProzent(float Geschwindigkeit, float Prozent)
{
float neuerWert;
neuerWert = Geschwindigkeit + (Geschwindigkeit * Prozent)/100;
return neuerWert;
}
|
Der Compiler sagt daraufhin:
Fehler 1 error C2666: 'addProzent': 2 Überladungen haben ähnliche Konvertierungen
Schlussendlich habe ich den Code dann so angepasst und das funktioniert auch.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
// C++ für Spieleprogrammierer
// Listing 4.9
//
//
#include<iostream>
using namespace std;
int addProzent1(int Staerke, int Prozent); // addProzent wurde eine 1 angehängt
float addProzent2(float Geschwindigkeit, float Prozent); // addProzent wurde eine 2 angehängt
// Hauptprogramm
//
int main()
{
// Variablen
//
int Staerke;
float Geschwindigkeit;
int Prozent;
// Abfrage der Werte
cout << "Bisherige Staerke des Charakters: ";
cin >> Staerke;
cout << "Bisherige Geschwindigkeit des Charakters: ";
cin >> Geschwindigkeit;
cout << "Steigerung in Prozent: ";
cin >> Prozent;
// Neue Werte berechnen
Staerke = addProzent1(Staerke, Prozent);
Geschwindigkeit = addProzent2(Geschwindigkeit, Prozent);
// Ausgabe der neuen Werte
cout << "\nNeue Charakterwerte: " << endl;
cout << "Staerke: " << Staerke << endl;
cout << "Geschwindigkeit: " << Geschwindigkeit << endl;
return 0;
}
// addProzent (für Integer-Werte
//
int addProzent1(int Staerke, int Prozent)
{
int neuerWert;
neuerWert = Staerke + (Staerke * Prozent)/100;
return neuerWert;
}
// addProzent (für float-Werte
//
float addProzent2(float Geschwindigkeit, float Prozent)
{
float neuerWert;
neuerWert = Geschwindigkeit + (Geschwindigkeit * Prozent)/100;
return neuerWert;
}
|
Mit überladenen Funktionen haben aber beide von mir korrigierten Fassungen nichts mehr zu tun. Mein Compiler ist Microsoft Visual C++ 2008 Express Edition. Hat der Autor jetzt einen Fehler gemacht, ist sein Code veraltet und überladenen Funktionen gibt es gar nicht mehr oder was ging hier schief?