Kleine Frage zu einem Anfängercode



  • Hi, der Code hat wahrscheinlich tausende Fehler, die ich versuche, nach und nach durch compilerfehlermeldungen abzuarbeiten. Für die momentane Fehlermeldung fällt mir aber nichts ein. Der Compiler sagt, die membervariable energie kann nicht geändert werden, da sie privat ist. Ich versuche sie aber über einen Konstruktor zu ändern, also sollte das doch gehen oder? Hier mal der Code:

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    const int breite = 800;
    const int hoehe = 600;
    
    class cSpieler {
    	private:
    	    int energie;
        	int xposi;
        	int yposi;
        public:
            void spielername (cSpieler spiel1);
            void koordinaten (cSpieler spiel1, int xpos, int ypos);
            void zeigedaten (cSpieler spiel1);
    	    string name;
            cSpieler ();      
    };
    cSpieler :: cSpieler () {
    	energie = 100;
    };
    int main () {
    
    	cSpieler spieler1;
    
    	cout << "Wilkommen bei der Spielerinitialisierung!\n\n";
    	spieler1.spielername (spieler1);
    	spieler1.koordinaten (spieler1, breite, hoehe);
    	cout << "Spielerdaten wurden initialisiert.\nSpielerdaten werden ausgegeben:\n";
    	spieler1.zeigedaten (spieler1);
    	cout << "Programm wird beendet!";
    }
    
    void cSpieler :: spielername (cSpieler spiel1) {
    	cout << "Bitte Spielernamen eingeben: \n";
    	cin >> spiel1.name;
    	cout << "Ausgewaehlter Spielername: " << spiel1.name;        }
    
    void cSpieler :: koordinaten (cSpieler spiel1, int xpos, int ypos) {
    	cout << "Spielerkoordinaten eingeben: \n";
    	cout << "Hoehe eingeben: ";
    	cin >> spiel1.yposi;
    	cout << "Breite eingeben: \n";
    	cin >> spiel1.xposi;        }
    
    void cSpieler :: zeigedaten (cSpieler spiel1) {
    	cout << "Spielername: " << spiel1.name << endl;
    	cout << "Energie: " << spiel1.energie << endl;
    	cout << "X-Position: " << spiel1.xposi << endl;
    	cout << "Y-Position: " << spiel1.yposi << endl;        }
    

  • Mod

    Lies die Fehlermeldungen genau. sie beziehen sich auf deine Funktion zeigedaten (Zeile 48 ff.), wo du munter auf private Datenelemente zugreifst.



  • Der Code kompiliert ohne Probleme: https://ideone.com/KeyfaY
    Aber es macht nicht viel sein einer Memberfunktion noch einmal zusätzlich ein Objekt zu übergeben.



  • Hey, ja, auf Seppjs Tipp hin, sind mir dann zwei weitere Fehler aufgefallen, die ich dann korrigiert habe. Die Folgefrage hab ich dann vergessen zu posten. Unzwar kompiliert er jetzt zwar, aber die ausgegebenen Daten sind für die Katz. Also die Daten, die bei der Funktion "zeigedaten" ausgegeben werden, sind ausgenommen von "energie" total fragwürdig. Name zB wird garnicht mehr angezeigt.



  • Mit zeigern gehts. Thema geloest, danke!



  • Warum heisst deine Klasse Spieler cSpieler , und die Funktion main nicht fmain ?



  • kamelkacke schrieb:

    Mit zeigern gehts. Thema geloest, danke!

    Nimm Referenzen. Die sind dazu geschaffen worden, damit C++ler nicht mit Zeigern rummachen.


Anmelden zum Antworten