[Beginner] Problem bei Zeigernutzung
-
Hallo Leute ich bins wieder...
Bin mit meinem Lehrbuch schon einige Themen weiter und beim Thema Zeiger und Referenzen angekommen - welche ich ganz gut verstehe.
Ich soll nun eine Aufgabe lösen die mir gestellt wurde in der ich die Parameter entweder per Wert, Referenz oder Zeiger verweise - je nachdem was die beste Lösung wäre.
Hier der Code bislang:
#include <iostream> using namespace std; // Spieler Struktur struct S_Spieler { int Energie; int Punkte; int Team; }; // Prototypen int BerechnePunkte (S_Spieler *Spieler, const int Bonus); int Zeigespieler (S_Spieler &Spieler); int Ladelevel (const Level); // Hauptprogramm int main () { // Variablen / Konstanten const Level = 1; const int Bonus = 550; S_Spieler Spieler; // Spieler initialisieren Spieler.Energie = 1000; Spieler.Punkte = 0; Spieler.Team = 1; // Funktionsverweise Ladelevel (Level); Zeigespieler (Spieler); cout << "Es gibt 550 Bonuspunkte" << endl; BerechnePunkte (&Spieler, Bonus); return 0; } // Funktionen // // Ladelevel Funktion int Ladelevel (const Level) { cout << "Level " << Level << " geladen" << endl; return 0; } // Zeigespeiler Funktion int Zeigespieler (S_Spieler &Spieler) { cout << "Daten des Spielers:" << endl; cout << "Energie: " << Spieler.Energie << endl; cout << "Punkte: " << Spieler.Punkte << endl; cout << "Team: " << Spieler.Team << endl; return 0; } // BerechnePunkte Funktion int BerechnePunkte (S_Spieler *Spieler, const int Bonus) { *Spieler->Punkte += Bonus; }Nachdem ich den Compiler anwerfe bekomme ich folgende Fehlermeldung:
...Listing_5_3.cpp(89) : error C2100: illegal indirection
Bekomme nun folgende Fehlermeldung nachdem ich vorherige Probleme ausm Weg geräumt habe.
Jemand eine Ahnung woran das hier liegen kann - finde den Fehler leider nicht wirklich - bzw. ist mir die Meldung neu.
-
Versuch mal:
int BerechnePunkte (S_Spieler *Spieler, const Bonus) { Spieler->Punkte += Bonus; return Spieler->Punkte; }Du hast vergessen, einen Integer zurückzugeben.
Gruß Kimmi
-
kimmi schrieb:
Versuch mal:
(*Spieler).Punkte += 10;Ohne Gewähr, da Post in Bewegung! Mal sehen, was aus der Frage wird :).
Gruß Kimmi
Hehe danke für die Antwort - hatte das Problem aber vor kurzem selbst gelöst stehe aber vor einer neuem Problem - welches ich gerade beschreibe
-
Siehe oben, hoffe, ich habe alles mitbekommen :).
Gruß Kimmi
-
kimmi schrieb:
Versuch mal:
int BerechnePunkte (S_Spieler *Spieler, const Bonus) { Spieler->Punkte += Bonus; return Spieler->Punkte; }Du hast vergessen, einen Integer zurückzugeben.
Gruß Kimmi
Hm Problem hat sich mit ner Sternchensetzung gelöst hehe - war ja ein Zeiger eigentlich - darum hab ich jetzt leider 2 unnötige Fragen gestellt -.-
-
Falls einer eine Lösung für das Problem mit der Fehlermeldung im Quelltext oben hat - bitte melden ! danke !!
...Listing_5_3.cpp(89) : error C2100: illegal indirection
-
Falke88 schrieb:
Falls einer eine Lösung für das Problem mit der Fehlermeldung im Quelltext oben hat - bitte melden ! danke !!
...Listing_5_3.cpp(89) : error C2100: illegal indirection
Wie soll man dazu etwas sagen, wenn Zeile 89 in Deinem Listing gar nicht vorkommt.
-
#include <iostream> using namespace std; // Spieler Struktur struct S_Spieler { int Energie; int Punkte; int Team; }; // Prototypen int BerechnePunkte (S_Spieler *Spieler, const int Bonus); void Zeigespieler (S_Spieler &Spieler); void Ladelevel (const int Level); //Datentyp nicht vergessen // Hauptprogramm int main () { // Variablen / Konstanten const int Level = 1; // Datentyp const int Bonus = 550; S_Spieler Spieler; // Spieler initialisieren Spieler.Energie = 1000; Spieler.Punkte = 0; Spieler.Team = 1; // Funktionsverweise Ladelevel (Level); Zeigespieler (Spieler); cout << "Es gibt 550 Bonuspunkte" << endl; BerechnePunkte (&Spieler, Bonus); return 0; } // Funktionen // // Ladelevel Funktion void Ladelevel (const int Level) { cout << "Level " << Level << " geladen" << endl; } // Zeigespeiler Funktion void Zeigespieler (S_Spieler &Spieler) { cout << "Daten des Spielers:" << endl; cout << "Energie: " << Spieler.Energie << endl; cout << "Punkte: " << Spieler.Punkte << endl; cout << "Team: " << Spieler.Team << endl; } // BerechnePunkte Funktion int BerechnePunkte (S_Spieler *Spieler, const int Bonus) { Spieler->Punkte += Bonus; return Spieler->Punkte; }Das müsste funktionieren. Du hast bei der Variable "Level" den Datentypen vergessen. Außerdem brauchen die Funktionen Ladelevel und Zeigespieler keinen Rückgabetyp.
-
Alles klar danke !
Also bei den Prototypen bzw. bei der Funktionseinleitung die Datentypen am Anfang sind für die Rückgabewerte zuständig?
-
Genau. Wenn der Rückgabety ein void ist brauchst du auch kein return hinzumachen. (Ausser du willst die Funktion vor dem eigentlichen Ende abbrechen).
-
MichelRT schrieb:
Falke88 schrieb:
Falls einer eine Lösung für das Problem mit der Fehlermeldung im Quelltext oben hat - bitte melden ! danke !!
...Listing_5_3.cpp(89) : error C2100: illegal indirection
Wie soll man dazu etwas sagen, wenn Zeile 89 in Deinem Listing gar nicht vorkommt.
ohja sorry - hab den Code selber noch paar mal geändert und ausversehen den Fehlercode davor noch mitkopiert - welcher inhaltlich ja der Gleiche war

aber das Problem hat sich schon geklärt Danke