Habe ein Problem mit dem Zeiger in C++



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

    ich habe denn Code durchgeschaut und kann keinen solchen Fehler entdecken, ausserdem würde der kompiller eine Fehlermeldung ausspucken wenn es so währe, tut er aber nicht, dass Programm lässt sich problemlos kompilieren und ausführen.

    Tja, dann postest du hier anderen Code als den du kompilierst. Dann kann dir niemand helfen.



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

    Du hast nicht korrekt übersetzt. Es gibt bei dir die Funktion BerechnePunke, du rufst aber die Funktion Berechnepunkte auf. Dieser Code sollte spätestens einen Linkerfehler beim Übersetzen haben.
    C++ beachtet Klein- und Großschreibung!

    Ach, da ist noch mehr falsch. Der Code kompiliert doch gar nicht!

    Edit: zu deinem Edit

    Was ich erreichen will, ist, dass der wert 400 über denn Zeiger der funktion übergeben wird, in der Funktion die Bonuspunkte von 150 dazuaddiert werden und nacher eine textausgabe erfolgt in der möglichst 550 stehen sollte

    Das würde man normalerweise nicht über Zeiger lösen. Und schon gar keinen Sinn ergibt es, in der Spieler-Struct einen Punkte-Zeiger zu haben. ICh glaube, du brauchst ein Grundlagen-Buch.

    ich verwende das Buch C++ für Spieleprogrammierer von heiko Kalista, ich versuche grade eine Aufgabenstellung zu lösen die dort gestellt wird, Nummer 6.10



  • ich hab da mal ne Frage, wie ich vorher schrieb hat mein virenscanner in der Datei die ich programmiert habe was gelöscht, kann das die Ursache sein? ich lese wirklich denn Code zeile für Zeile durch und bin sicher das kein solcher fehler auftaucht und wenn ich denn kopierten text im forum lese find ich die stelle auch nicht, es wird Berechnepunkte ja nur drei mal geschrieben. Wie gesagt ich bekomme auch keine meldung vom kompilieren, hast du dich vl verlesen?



  • @DasViereck

    void BerechnePunkte(int *pPunkte, int Bonuspunkte))

    Aus deinem Code kopiert.



  • das was du kopiert hast ist bei mir der richtig geschriebene Code!

    BerechnePunkte

    ps.: war was ich geschrieben habe bei dir jetzt auch richtig geschrieben?



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

    das was du kopiert hast ist bei mir der richtig geschriebene Code!

    BerechnePunkte

    Is klar



  • ich will hir niemanden verappeln ich meins ernst



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

    ich will hir niemanden verappeln ich meins ernst

    Jaja.

    Auch aus deinem Code kopiert: Berechnepunkte (&Punkte, Bonuspunkte);

    Und auch:

    struct S_Spieler { int Energie, *pPunkte, Team; };
    (...)
    S_Spieler Spieler1;
    Spieler1.Punkte = 400;
    

    Dabei hat die Struct gar keine Punkte. Das kompiliert nicht.

    Verarschen kann ich mich alleine.



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

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

    ich will hir niemanden verappeln ich meins ernst

    Jaja.

    Auch aus deinem Code kopiert: Berechnepunkte (&Punkte, Bonuspunkte);

    Und auch:

    struct S_Spieler { int Energie, *pPunkte, Team; };
    (...)
    S_Spieler Spieler1;
    Spieler1.Punkte = 400;
    

    Dabei hat die Struct gar keine Punkte. Das kompiliert nicht.

    Verarschen kann ich mich alleine.

    tut mir leid, ich hab denn PC neugestartet und hab das Projekt von vorhin mit dem gleichen Code geöffnet, jetzt wurde mir aber angezeigt das bei BerechnePunkte die Funktionsdefinition nicht gefunden wurde und es lässt sich auch nicht kompilieren, obwohl das vorher funktionierte und nichts angezeigt wurde kp. Muss mit dem Virenscanner zusammenhängen, ich schreib einfach denn code komplett neu aber langsam hab ich keinen Bock mehr, ich hab geschaut ich bin mir absolut sicher das BerechnePunkte überall richtig geschrieben wurde, was solls vielen dank für eure Hilfe.

    Edit.: Ich hab jetzt noch nen Screenshot online gestellt, der zeigt das der Code denn ihr kopiert habt richtig geschrieben ist. https://ibb.co/SfNdV3V

    und noch einen denn manni66 sein post zeigt: https://ibb.co/xfX1wQP

    Vielleicht ists ja doch mein Fehler und ich bin einfach nur zu blöd es zu sehen und kapieren, ich weiss es auch nicht aber gute n8



  • @DasViereck
    Der Code, den Du zuletzt gezeigt hast:

    #include <iostream>
    
    using namespace std;
    
    void Berechnepunkte(int *pPunkte, int Bonuspunkte);
    struct S_Spieler { int Energie, *pPunkte, Team; };
    
    int main()
    
    {
    
    S_Spieler Spieler1;
    
    Spieler1.Punkte = 400;
    Spieler1.pPunkte = &Punkte
    Spieler1.Energie = 100;
    Spieler1.Team = 1;
    
    int Bonuspunkte = 150;
    
    Berechnepunkte (&Punkte, Bonuspunkte);
    
    cout << "Punkteausgabe: ";
    cout << Spieler1.pPunkte << endl;
    return 0;
    
    }
    
    void BerechnePunkte(int *pPunkte, int Bonuspunkte)
    {
    *pPunkte += Bonuspunkte;
    
    }
    

    Die Funktionsdeklaration in Zeile 5 lautet Berechnepunkte, die Definition in Zeile 29 aber BerechnePunkte, so kompiliert das nicht.

    Dein eigentliches Problem ist aber wohl der Umgang mit einem Zeiger, aber bei Deinem Vorhaben ist kein Zeiger erforderlich und Du solltest auch gar keinen benutzen!



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

    @DasViereck
    Der Code, den Du zuletzt gezeigt hast:

    #include <iostream>
    
    using namespace std;
    
    void Berechnepunkte(int *pPunkte, int Bonuspunkte);
    struct S_Spieler { int Energie, *pPunkte, Team; };
    
    int main()
    
    {
    
    S_Spieler Spieler1;
    
    Spieler1.Punkte = 400;
    Spieler1.pPunkte = &Punkte
    Spieler1.Energie = 100;
    Spieler1.Team = 1;
    
    int Bonuspunkte = 150;
    
    Berechnepunkte (&Punkte, Bonuspunkte);
    
    cout << "Punkteausgabe: ";
    cout << Spieler1.pPunkte << endl;
    return 0;
    
    }
    
    void BerechnePunkte(int *pPunkte, int Bonuspunkte)
    {
    *pPunkte += Bonuspunkte;
    
    }
    

    Die Funktionsdeklaration in Zeile 5 lautet Berechnepunkte, die Definition in Zeile 29 aber BerechnePunkte, so kompiliert das nicht.

    Dein eigentliches Problem ist aber wohl der Umgang mit einem Zeiger, aber bei Deinem Vorhaben ist kein Zeiger erforderlich und Du solltest auch gar keinen benutzen!

    Danke, ja es stimmt ich habe Berechnepunkte und BerechnePunkte geschrieben das ist der Fehler! hab nur geschaut weil einer geschrieben hat ich hätte BerechnePunke geschrieben^^

    Es müsste doch ein Fehler beim kompilieren auftreten, bei mir tat es das aber nicht! Erst nach dem neustart des PCs zeigte er einen Fehler an, bitdefender hat die Datei des Quellcodes schreibgeschützt könnte das die Ursache sein das zuerst kein Fehler beim Kompilieren auftrat?

    Und ich verwende denn Zeiger nur weil einer ausdrücklich bei der Aufgabe in meinem Buch verwendet werden soll.



  • @DasViereck sagte in Habe ein Problem mit dem Zeiger in C++:
    Dann vielleicht eher so:

    struct S_Spieler { int Energie, Punkte, Team; };
    

    ...

    S_Spieler Spieler1;
    
    Spieler1.Punkte = 400;
    Spieler1.Energie = 100;
    Spieler1.Team = 1;
    

    ...

    Berechnepunkte (&Spieler1.Punkte, Bonuspunkte);
    

    ...

    cout << Spieler1.Punkte << endl;
    

    Ansonsten muss doch vorher auch der Umgang mit Zeigern vermittelt worden sein?



  • 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.


Anmelden zum Antworten