Klasse Katze - gelöst



  • Hallo und guten Abend liebe Gemeinde.

    Ich wollte folgenden Programmcode schreiben:

    #pragma once
    #include <string>
    using namespace std;
    
    class Katze
    {
    private:
      string Name;
      int Alter;
      int Gewicht;
    
    public:
      Katze();
      ~Katze();
    
      string getName();
      int getAlter();
      int getGewicht();
    
      void setName();
      void setAlter();
      void setGewicht();
    };
    
    #include <iostream>
    #include <string>
    #include "Klasse Katze.h"
    using namespace std;
    
    Katze::Katze()
    {
    
    }
    
    Katze::~Katze()
    {
    
    }
    
    string Katze::getName()
    {
      return Name;
    }
    
    int Katze::getAlter()
    {
      return Alter;
    }
    
    int Katze::getGewicht()
    {
      return Gewicht;
    }
    
    void Katze::setAlter(int age)
    {
      Alter = age;
    }
    
    void Katze::setName(string name)
    {
      Name = name;
    }
    
    void Katze::setGewicht(int weight)
    {
      Gewicht = weight;
    }
    
    #include <iostream>
    #include <string>
    #include "Klasse Katze.h"
    using namespace std;
    
    int main()
    {
      Katze Frisky;
    
      Frisky.setName(Maxi)
      Frisky.setAlter(1);
      Frisky.setGewicht(2);
    
      cout << "Name der Katze: " << Frisky.getName() << "\n";
      cout << "Alter der Katze: " << Frisky.getAlter() << "\n";
      cout << "Gewicht der Katze: " << Frisky.getGewicht() << "\n";
    
      cout << "\n";
      cout << "\n";
      cout << "Fuenf Jahre spaeter\n";
      cout << "\n";
      cout << "\n";
    
      Frisky.setAlter(6);
      Frisky.setGewicht(8);
    
      cout << Frisky.getName() << " ist jetzt " << Frisky.getAlter() << "Jahre alt!\n";
      cout << Frisky.getName() << " wiegt jetzt " << Frisky.getGewicht() << "kg!\n";
    
      return 0;
    }
    

    In Zeile 80 wird bei mir jedoch der Name "Maxi" rot unterringelt mit der Meldung

    Error: Der Bezeichner "Maxi" ist nicht definiert
    

    Woran liegt das? Was habe ich falsch gemacht?

    Danke für die Antworten im Voraus.

    Gruß

    Max



  • Frisky.setName(Maxi)

    =>

    Frisky.setName("Maxi");

    Strichpunkt und "" vergessen.



  • Danke... den Strichpunkt habe ich echt nicht mehr gesehen...

    Aber warum muss der Name Maxi in Gänsefüsschen? Ich dachte, dass die setter Funktion das schon kapiert...



  • Die setter Funktion will einen String.
    Strings stehen normalerweise in Anführungszeichen.



  • Nathan schrieb:

    Die setter Funktion will einen String.
    Strings stehen normalerweise in Anführungszeichen.

    Ich Blödmann ... jetzt wo Du es gesagt hast, ist es mir wieder eingefallen, dass Strings in Anführungszeichen müssen...

    Ich Vollpfosten... *Kopf gegen die Wand schlag*



  • Noch ein kleiner Hinweis den du im Hinterkopf behalten solltest:
    Normalerweise solltest du Name, Alter etc bereits im Konstruktor von Katze setzen:

    Katze::Katze(string name, int alter, int gewicht) 
    {
    Name = name;
    Alter = alter;
    Gewicht = gewicht;
    }
    

    Noch besser (vermute aber der syntax wäre dir neu):

    Katze::Katze(const string& name, int alter, int gewicht) : Name(name), Alter(alter), Gewicht(gewicht) 
    {
    }
    

    Die Idee ist, das nach der Konstruktion "Katze" schon alle richtigen Werte hat, und man nicht vergessen kann einen Wert per set anzugeben - da würde dann nämlich der compiler jammern.



  • silent_max schrieb:

    Nathan schrieb:

    Die setter Funktion will einen String.
    Strings stehen normalerweise in Anführungszeichen.

    Ich Blödmann ... jetzt wo Du es gesagt hast, ist es mir wieder eingefallen, dass Strings in Anführungszeichen müssen

    Konntest Du nicht wissen, bist ja erst ein Jahr dabei. Da kann man auch noch nicht die Fehlermeldungen des Compilers interpretieren.
    Macht aber nix, genau für solche Fälle gibt es ja dieses Forum.

    SCNR



  • Eine klasse Katze! 👍



  • kleiner Troll schrieb:

    Frisky.setName(Maxi)

    =>

    Frisky.setName("Maxi");

    Strichpunkt und "" vergessen.

    Härtner können zu Karneval auch nehmen

    #define STR(x) #x
    ...
    Frisky.setName(STR(Maxi));
    


  • Warum sind die getter eigentlich nicht const? Und warum ist das Alter und Gewicht Vorzeichenbehaftet, also int statt unsigned? Willst Du auch zukünftige Katzen unterstützen? Dann wäre das Alter momentan negativ 😉 . Aber was sind dann Katzen mit einem negativen Gewicht?



  • tntnet schrieb:

    Warum sind die getter eigentlich nicht const?

    Ok, ein Versehen.

    tntnet schrieb:

    Und warum ist das Alter und Gewicht Vorzeichenbehaftet, also int statt unsigned?

    Um es nicht zu übertreiben.

    tntnet schrieb:

    Willst Du auch zukünftige Katzen unterstützen? Dann wäre das Alter momentan negativ 😉

    Naja, wir wissen beide, daß "Alter" nicht so geschickt ist wie "Geburtstag". Man würde nur an Fehlern weiterfehlen.

    tntnet schrieb:

    Aber was sind dann Katzen mit einem negativen Gewicht?

    Naja, wir wissen beide, daß "Gewicht" nicht so geschickt ist wie "Masse". Man würde nur an Fehlern weiterfehlen. Und die Masse sollte double sein. unsigned double gibt es ja noch nicht.

    Wenn nicht VOLLKOMMEN klar, daß eine andere Skalierung vom Leser-Programmierer(der nicht unbedingt Fachmann für Tierärztliche Norm-Bestimmungen ist) angenommen wird, würde ich physikalische Messgrößen immer in SI-Einheiten angeben.
    double Masse ist also in Kilogramm.
    Will man abweichen, dann
    int MasseInGramm
    oder
    double MasseInGramm
    .



  • Tierärztliche

    Was hat das ganze mit Tierärzten zu tun?

    double MasseInGramm
    

    Sicher hat das einen anderen Grund, aber ROFL, willst du die Katze auf das Pikogramm genau wiegen?



  • Sone schrieb:

    Tierärztliche

    Was hat das ganze mit Tierärzten zu tun?

    Wer misst sonst regelmäßig Katzenmassen?

    Sone schrieb:

    double MasseInGramm
    

    Sicher hat das einen anderen Grund, aber ROFL, willst du die Katze auf das Pikogramm genau wiegen?

    Sobald man double benutzt, ist es wurstegal, ob man in Gramm, Kilogramm, Tonnen, Kilotonnen oder sonstwas mißt. Darum bevorzuge ich Kilogramm. Aber das ist nur eine leichte Bevorzugung. Wenns bei den Tierbenutzern (darf ja nicht mehr Tierärzte sagen) voll üblicher ist, Gramm zu nehmen, dann halt in Gramm. Das ist für mich aber NUR eine Frage der Benutzerschnittstelle.
    Würde mich ungern auf int festlegen da, weil bestimmt irgendwann Waagen auftauchen, die auf halbe Gramm messen. Zum Beispiel hier meine Dope-Waage. Mit der würde ich einen Hamster wäägen. Und sie zeigt in Gramm Nachkommastellen an. Warum sollte die Software nicht erlauben, daß man die auch erfasst?



  • volkard schrieb:

    Sone schrieb:

    Tierärztliche

    Was hat das ganze mit Tierärzten zu tun?

    Wer misst sonst regelmäßig Katzenmassen?

    Chinesische Köche.



  • Tierbenutzern 😃 👍

    MiauZeTung schrieb:

    volkard schrieb:

    Sone schrieb:

    Tierärztliche

    Was hat das ganze mit Tierärzten zu tun?

    Wer misst sonst regelmäßig Katzenmassen?

    Chinesische Köche.

    😋 👍

    Mit der würde ich einen Hamster wäägen

    Du meinst wiegen? ^^

    kk, du hast schon Recht, es macht schon Sinn.


Anmelden zum Antworten