Anfaengercode, kleiner unauffindbarer Fehler



  • Hi, warum funktioniert die funktion berechnepunkte nicht? Es wird nichts dazuaddiert. Danke!

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    struct spieler {
    	int energie;
    	int punkte;
    	int team;
    };
    void berechnepunkte (spieler *spiel1, int bonuspunkte);
    void zeigespieler (spieler &spiel1);
    void ladelevel (int levelangabe);
    
    int main () {
    
        spieler spieler1;
    	spieler1.energie = 1000;
    	spieler1.punkte = 0;
    	spieler1.team = 1;
    
    	int level = 20;
    	int bonus = 1000;
    
    	ladelevel (level);
    	zeigespieler (spieler1);
    	berechnepunkte (&spieler1, bonus);
    	zeigespieler (spieler1);
    	cout << "Gang Bang Brother!";
    }
    
    void ladelevel (int levelangabe) {
    	cout << "Gegenwaertiges Level: " << levelangabe << endl;
    }
    
    void zeigespieler (spieler &spiel1) {
    	cout << "Spielerenergie: " << spiel1.energie << endl;
    	cout << "Spielerpunkte: " << spiel1.punkte << endl;
    	cout << "Team: " << spiel1.team << endl;
    }
    
    void berechnepunkte (spieler *spiel1, int bonuspunkte) {
    	spiel1->punkte += bonuspunkte;
    }
    

  • Mod

    Es ist zwar ein bisschen wirr (warum benutzt du manchmal Referenzen, manchmal Pointer?), aber an sich funktioniert es doch:
    http://ideone.com/BSaVpt
    Welche andere Ausgabe erwartest du?



  • es funktioniert, du gibst nur erst die daten aus bevor du sie berechnet hast..



  • Hey die unterschiedlichen Parameterübergaben verwende ich nach dem Muster von c++ für spieleprogrammierer. Seite 175. Dort stehen Situationen, wann man was benutzen sollte.

    Ansonsten ist der Fehler halt, das zeigespieler();, beim zweiten mal, 2000 punkte ausgeben sollte. Wegen der Rechnung in Zeile 27.

    @shadow, ich verstehe immernoch nicht wo der Fehler ist..nach der berechnung gibt er die daten doch nochmal aus



  • kamelkacke schrieb:

    Hey die unterschiedlichen Parameterübergaben verwende ich nach dem Muster von c++ für spieleprogrammierer. Seite 175. Dort stehen Situationen, wann man was benutzen sollte.

    Und da steht nicht, dass man const-Referenzen verwenden soll? Verdächtig.



  • Doch das steht da..aber ist doch garnicht relevant


  • Mod

    Ansonsten ist der Fehler halt, das zeigespieler();, beim zweiten mal, 2000 punkte ausgeben sollte. Wegen der Rechnung in Zeile 27.

    Die Spielerpunkte sind vorerst 0. Dann wird der Bonus, 1000, addiert - nun sind sie 1000.

    Das ist auch völlig stimmig mit den Ausgaben von Ideone. Hast du vergessen, den Punkten am Anfang 1000 zuzuweisen?



  • Nein, das ist nur wegen dem Kommentar von SeppJ. Einen Fehler seh ich nicht, es sollte 2000 ausgegeben werden. Was passiert denn? Energie ist 1000, nicht Punkte -.-



  • Boah wie dumm. Ja hab ganze zeit auf ne 2000 bei der Ausgabe gewartet. Danke


  • Mod

    Bashar schrieb:

    kamelkacke schrieb:

    Hey die unterschiedlichen Parameterübergaben verwende ich nach dem Muster von c++ für spieleprogrammierer. Seite 175. Dort stehen Situationen, wann man was benutzen sollte.

    Und da steht nicht, dass man const-Referenzen verwenden soll? Verdächtig.

    Das findest du da dran verdächtig? Fehlende const-correctness kann man sich ja später noch mal schnell angewöhnen. Aber was soll der Pointer da? Gibt's in dem Buch eine Begründung?



  • Ich kenn das Buch nicht. Die Konvention findest du aber z.B. auch bei Lakos (hatte ich hier vor ein paar Jahren schonmal zitiert) und Stroustrup.


Anmelden zum Antworten