[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


Anmelden zum Antworten