Habe ein Problem mit dem Zeiger in C++



  • wie lautet der befehl um einen Zeiger zu initalisieren?



  • Gegenfrage: worauf soll er denn zeigen? Was möchtest du erreichen?

    Generell mit pPunkte = <hier eine (gültige) Adresse> (bzw bei dir Spieler1.pPunkte = ...)



  • Hir mal wieder der Code, ich hab denn zeiger jetzt initialisiert, es währe ja relativ einfach wenn beim ausführen des Programms jetzt was ausgegeben würde, dann könnte ich sehen was und ob es richtig oder falsch ist, aber es wird einfach nichts ausgegeben:

    #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;

    }

    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 😕



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



  • @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!

    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.



  • @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 😕


Anmelden zum Antworten