So nur um mal eine Fehlerquelle zu finden:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
void Steigerung (int Strengh, int Agility)
{
Strengh = Strengh/10 + Strengh;
Agility = Agility/10 + Agility;
}
|
Das kann nie so funktionieren. Erstens machst du etwas illegales, den irgendwas dividieren und dann in einen Int (Gaanzzahl Wert) zu klatschen ist etwas, unschön viel besser so: oder mit static_cast Operator.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
void Steigerung (int Strengh, int Agility)
{
Strengh = (int)(Strengh/10) + Strengh;
Agility = (int)(Agility/10) + Agility;
}
|
Nun manipulierst du zwar die Werte, aber diese zwei Variablen haben nur in dieser Funktion ihre werte, wenn diese beendet wird (}), dann sind die wech, und nix ist geschehen.
Wir könnten das ja so machen:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
int Steigerung (int Strengh, int Agility)
{
Strengh = (int)(Strengh/10) + Strengh;
return Agility = (int)(Agility/10) + Agility;
}
|
Das Funktioniert so prima, nur ein Problem: Strenght geht verloren in der Funktion, nur Agil können wir retten.
Dehalb muss ein ganz neuer Ansatz her. Wir sagen einfach: OK, pass auf, Strenght und Agil sind Variablen, diese wollen wir wenn du die Funktion beendest aner wieder zurück. Das machen wir mit dem Referenz Operator. (&)
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
void Steigerung (int &Strengh, int &Agility)
{
Strengh = (int)(Strengh/10) + Strengh;
Agility = (int)(Agility/10) + Agility;
}
|
das funktioniert doch schon ganz prima. Noch schöner wäre es mit Pointern.
|
C-/C++-Quelltext
|
1
2
3
4
5
6
|
void Steigerung (int *Strengh, int *Agility)
{
*Strengh = (int)(*Strengh/10) + *Strengh;
*Agility = (int)(*Agility/10) + *Agility;
}
|
So. Der Funktionskopf sagt uns: Gib mit zwei Adressen (aus dem Hauptspeicher) die auf die Varible Strenght und Agil zeigen. Damit haben wir KEINE Werte, sondern Adresse. Um nun wieder die Adresse in einen Wert zurückzuverwandeln, setzen wir nochmals den * Operator ein, um eine Adresse zzu dereferenzieren (näheres siehe Buch)