Habe ein Problem mit dem Zeiger in C++



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

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

    aber nichts ausgegeben, wo liegt der fehler`?

    Möglichkeit 1: es wird etwas ausgegeben, du merkst es aber nicht
    Möglichkeit 2: Spieler1.*pPunkte = Punkte wohin denkst du wird da der Wert geschrieben?

    Möglichkeit 2: ich denke das dem Zeiger der Sturktur Spieler1 der wert der variable Punkte zugeweisen wird oder?

    edit.: könnte folgendes passieren das der wert des zeigers der Variable Punkte zugeweisen wird?

    trotzedm normalerweise müsste doch etwas ausgegeben werden, beim ausführen des Programms steht aber nur folgendes:

    C:\Users\Admin\source\repos\Aufgabe 6.10\Debug\Aufgabe 6.10.exe (Prozess "1476") wurde mit Code "0" beendet.
    Drücken Sie eine beliebige Taste, um dieses Fenster zu schließen.



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

    Möglichkeit 2: Spieler1.*pPunkte = Punkte wohin denkst du wird da der Wert geschrieben?

    Möglichkeit 2: ich denke das dem Zeiger der Sturktur Spieler1 der wert der variable Punkte zugeweisen wird oder?

    Nein. Du weist dem Wert, auf den der Zeiger zeigt, Punkte zu. Preisfrage: worauf zeigt der Zeiger? Und ist es erlaubt, hier etwas zuzuweisen?

    edit.: könnte folgendes passieren das der wert des zeigers der Variable Punkte zugeweisen wird?

    Sorry, den Edit kann ich nicht parsen. Was meinst du?

    Die eigentliche Frage ist, was der Zeiger pPunkte überhaupt für einen Sinn hat (Tipp: gar keinen).



  • also könnte es sein das der zeiger auf Punkte zeigt? und ich Punkte dem Zeiger zuweise, was heisst, dass der zeiger auf sich selbst zeigen soll? ps.: das fänd ich lustig 😃



  • Nein. Wie kommst du darauf?!

    pPunke ist überhaupt niemals initialisiert worden, du darfst also nicht auf *pPunkte zugreifen.



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

    Möglichkeit 2: ich denke das dem Zeiger der Sturktur Spieler1 der wert der variable Punkte zugeweisen wird oder?

    Mal davon abgesehen, dass das so nicht übersetzt wird, kann man Zeigern Adressen zuweisen, aber keine Zahlen.



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


Anmelden zum Antworten