Habe ein Problem mit dem Zeiger in C++



  • Ja, es ist nur ein Kapitel das ich noch nicht verstehe, aber ich will es verstehen, so hab denn Code neu geschrieben, es wird nur ein Fehler bei += angezeigt. "kein Operator stimmt mit diesen Operanden überrein"

    #include <iostream>

    using namespace std;

    struct S_Spieler { int Energie; int Punkte; int Team;};
    void BerechnePunkte(S_Spieler * pSpieler, int Bonus);

    int main()

    {

    S_Spieler * pSpieler = 0;
    S_Spieler Spieler1;
    //Spieler initialisieren
    Spieler1.Energie = 100;
    Spieler1.Punkte = 400;
    Spieler1.Team = 1;
    int Bonus = 150;
    pSpieler = &Spieler1;
    
    BerechnePunkte(&Spieler1, Bonus);
    
    return 0;
    

    }

    void BerechnePunkte(S_Spieler* pSpieler,int Bonus)
    {
    *pSpieler += Bonus;
    }

    edit: möchte nur das in der Funktion 400 mit dem Bonus von 150 addiert wird



  • Ein Spieler ist ja auch ein Spieler und keine Zahl. Du willst vermutlich auf den Member BonusPunkte des Spielers zugreifen, also musst du pSpieler->BonuspSpieler->Punkte benutzen. Das Einkommen eines Fußballprofis wird ja auch auf dessen Bankkonto überwiesen und nicht auf den Spieler selbst.

    Edit: Punkte statt Bonus



  • @DocShoe sagte in Habe ein Problem mit dem Zeiger in C++:

    Ein Spieler ist ja auch ein Spieler und keine Zahl. Du willst vermutlich auf den Member Bonus des Spielers zugreifen, also musst du pSpieler->Bonus benutzen.

    Bonus ist eine eigene Integer Variable und nicht in der Struktur enthalten.

    Edit: Sag mal könntest du so nett sein und denn Code richtigstellen, so das ein Zeiger in der Funktion verwendet wird und in der Funktion einfach 400 mit 150 addiert wird?

    Im Buch sind ja ein paar Beispiele, aber bei denn meisten werden Referenzen verwendet, bei dieser Aufgabe soll ich aber einen Zeiger verwenden, ich kapiers einfach nicht wie man denn Code schreiben muss das ich dass kriege was ich ´will 😕



  • ich les mir grade die Grundlagen zu Zeiger online durch, denke das Prinzip kapier ich, ich will jetzt in der Funktion auf die gespeicherte Variable Punkte des Zeigers *pSpieler zugreifen und denn Wert mit der Variable Bonus addieren, wie müsste das richtig ausschauen?



  • @DasViereck pSpieler->Punkte += Bonus

    Punkte ist ein Member von S_Spieler und somit auch von *pSpieler

    Die Schreibweise mit -> ist identisch mit (*pSpieler).Punkte += Bonus



  • Einfach

    void BerechnePunkte(S_Spieler* pSpieler, int Bonus)
    {
        pSpieler->Punkte += Bonus;
    }
    

    Oder alternativ: (*pSpieler).Punkte += Bonus;



  • JA ICH HABS XD

    hatte nur noch einen kleinen Fehler bei meinem Code, habe geschrieben *pSpieler->Punkte += Bonus
    das * war Falsch, man schreibt es ohne, DANKE

    Warum darf das Sternchen nicht vorangestellt werden, könnt ihr mir das noch sagen?/Warum muss wenn man es macht, es in Klammern stellen?

    War ja ne schwere Geburt, danke für eure Hilfe, wusste einfach nicht wie man denn Befehl genau schreibt^^



  • @DasViereck sagte in Habe ein Problem mit dem Zeiger in C++:

    Warum darf das Sternchen nicht vorangestellt werden, könnt ihr mir das noch sagen?/Warum muss wenn man es macht, es in Klammern stellen?

    Es darf, es bedeutet dann halt etwas anderes. Die Rangfolge des vorangestellten *-Operators ist niedriger als die des .-Operators (vereinfacht gesagt), so dass *p.a immer *(p.a) bedeutet. Wenn man (*p).a meint, muss man zwingend die Klammern schreiben, oder den -> Operator benutzen.



  • In deinem Originalcode muß das Sternchen verwendet werden, weil du ja dort Punkte als Zeiger deklariert hattest (dieser aber nicht korrekt initialisiert wurde).

    Und bei (*pSpieler).Punkte (mit dem neuen Code, wo Punkte als intdeklariert ist) muß man so klammern, weil ohne die Klammern der Punktoperator (sowie auch der Zeigeroperator) eine höher Priorität hat und somit dann als *(pSpieler.Punkte) += Bonus; interpretiert wird (und das dann einen Fehler erzeugt, da der Ausdruck pSpieler.Punkte ungültig ist, da pSpieler einen Zeiger darstellt und kein Klassen- bzw. Strukturobjekt).



  • @DasViereck sagte in Habe ein Problem mit dem Zeiger in C++:

    Warum darf das Sternchen nicht vorangestellt werden, könnt ihr mir das noch sagen?/Warum muss wenn man es macht, es in Klammern stellen?

    Weil C Zeiger nicht in die Hände von C++lern gehören.


Anmelden zum Antworten