Konsolenprogramm gibt keinen bzw. falschen Wert aus...



  • "klappt nicht" ist doch keine sinnvolle Fehlerbeschreibung. Der Code sollte so funktionieren.



  • Konrad Rudolph schrieb:

    "klappt nicht" ist doch keine sinnvolle Fehlerbeschreibung. Der Code sollte so funktionieren.

    class Zaehler
    {
    private:
    	int Zaehlerstand;
    
    public:
    	{
    Zaehler()
      :Zaehlerstand (0);
    
    	int GetZaehlerstand(void) {return Zaehlerstand;}
    	void SetZaehlerstand (int Wert);
    	void Zaehlerrunter (void);
        void Zaehlerhoch(void);
    
    };
    

    So is es nicht richtig..zumindest werden Fehlermeldungen ausgegeben...



  • Was habe ich falsch gemacht?



  • Du hast nicht den Code von Hazzel genommen. Bei ihm sieht es nach dem public wie folgt aus:

    Zaehler()
      : Zaehlerstand(0)
    {
      //in diesem Fall alternativ auch
      //Zaehlerstand = 0;
    }
    

    Bei dir sieht es so aus:

    {
    Zaehler()
      :Zaehlerstand (0);
    

    Sieht ganz anders aus, richtig?



  • ja, aber funktioniert immer noch nich...

    irgendwo is der Wurm drin...und es liegt wahrscheinlich an den geschweiften Klammern...



  • Dann zeig doch einfach mal deinen _aktuellen_ Code.



  • #include <iostream>
    #include <conio.h>
    using namespace std;
    
    class Zaehler
    
    private:
    	int Zaehlerstand;
    
    public:  
    Zaehler()
      : Zaehlerstand(0)
    {
    
    	int GetZaehlerstand(void) {return Zaehlerstand;}
    	void SetZaehlerstand (int Wert);
    	void Zaehlerrunter (void);
        void Zaehlerhoch(void);
    
    }
    
    };
    
    void Zaehler::SetZaehlerstand(int Wert)
    {
    
    	Zaehlerstand = 0;
    }
    
    void Zaehler::Zaehlerhoch(void)
    {
    	Zaehlerstand = Zaehlerstand + 1;
    }
    void Zaehler::Zaehlerrunter(void)
    {
    	Zaehlerstand = Zaehlerstand - 1;
    }
    
    int main()
    {
    	Zaehler zaehler1;
    	cout << " Zaehlerstand: " << zaehler1.GetZaehlerstand() << endl;
    
    	zaehler1.Zaehlerhoch();
    
    	cout << "Zaehlerstand: " << zaehler1.GetZaehlerstand() <<endl;
    getch();
    
    	return 0;
    }
    

    😕 Ich denke, so meinte er es, oder?



  • Nein, er meint es so:

    #include <iostream>
    //#include <conio.h>  conio ist compilerspezifisch, also weg damit
    
    using namespace std;
    
    //Man beachte die öffnende geschweifte Klammer
    class Zaehler {
    
    //das braucht's nicht, in class ist eh alles per default private
    //private:
        int Zaehlerstand;
    
    public:  
        //Konstruktordefinition  machen wir mal hier, ist ja auch nur 'ne "Methode", 'ne spezielle zwar, aber egal.
        Zaehler() : Zaehlerstand(0)  { }
    
        //Restliche Methoden, die mach ich alle inline, weil's so kurze sind. 
        int GetZaehlerstand() { return Zaehlerstand; }
        void SetZaehlerstand (int Wert) { Zaehlerstand = Wert; }
        void Zaehlerrunter() { --Zaehlerstand; }
        void Zaehlerhoch() { ++Zaehlerstand; }
    };
    
    int main()
    {
        Zaehler zaehler1;
        cout << " Zaehlerstand: " << zaehler1.GetZaehlerstand() << endl;
    
        zaehler1.Zaehlerhoch();
    
        cout << "Zaehlerstand: " << zaehler1.GetZaehlerstand() <<endl;
        cin.get();  //getch() ist nicht portabel
        return 0;
    }
    

    MfG

    GPC



  • Und mal zur Erklärung: Auch wenn nichts dort drin steht - die Klammern bei der Ctor-Definition sind wichtig. Der Konstruktor ist eine (fast) normale Methode und benötigt deshalb auch einen Methodenrumpf. Und wenn, wie in diesem Beispiel alle nötigen Aktionen von der Initialisierungsliste übernommen werden, bleibt ein leerer Rumpf (also nur noch die { } Klammern) übrig.



  • ROFL. 😃 😃 😃
    Also, wie jemand es schafft, 3mal Copy&Paste falsch zu machen, finde ich schon erstaunlich !!

    Ein schöner "Montagmorgen-Aufheller",

    Simon2.


Anmelden zum Antworten