Habe ein Problem mit dem Zeiger in C++



  • Hir der Code, habe erst die erste Funktion geschrieben um zu sehen ob sie funktioniert, es wird beim ausführen des programmes aber nichts ausgegeben, wo liegt der fehler`?

    #include <iostream>

    using namespace std;

    void Berechnepunkte(int * pPunkte, int Bonuspunkte);

    int main()

    {

    struct S_Spieler { int Energie, *pPunkte, Team; };
    
    S_Spieler Spieler1;
    
    int Punkte = 400;
    
    Spieler1.*pPunkte = Punkte
    Spieler1.Energie = 100;
    Spieler1.Team = 1;
    
    int Bonuspunkte = 150;
    
    Berechnepunkte (&Punkte, Bonuspunkte);
    
    cout << "Punkteausgabe: ";
    cout << Punkte << endl;
    return 0;
    

    }

    void BerechnePunkte(int * pPunkte, int Bonuspunkte)
    {
    *pPunkte += Bonuspunkte;

    }



  • Hast du auch eine main Funktion?



  • klar, steht doch oben



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



  • ein Problem ist wohl das ich nicht die genaue schreibweise kenne wie man einen Zeiger in einer strukture richtig verwendet,

    ausserdem sollte ich wohl noch anmerken das mein Bitdefender virenscanner beim kompilieren meines codes in der datei einen Virus erkannt haben will und wohl irgendwas gelöscht hat lol ich hab denn virenscanner deinstalliert da der sowieso nur sichere dateien als virus deklariert und denn code neu kompiliert, kannst trotzdem sein das der virenscanner schuld ist das nichts ausgegeben wird?



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


Log in to reply