Vector und Instanz?



  • Hi!

    Also ich habe eine Klasse Mitarbeiter und eine Instanz davon. Diese Instanz will ich in einem Vector ablegen. Alles kein Problem.

    Jetzt zum Problem:

    Ich will diese Instanz wieder auslesen, und dann eine Funktion ausführen, die z.B. den Namen des Mitarbeiters ausgibt. Das macht er aber dann nicht.

    Mein Versuch:

    CMitarbeiter person = Vector[0];
    person.getName();
    

    Er macht es, aber gibt den Namen nicht aus. An der Funktion liegt es nicht, die stimmt.

    Vielleicht kann mir da jemand helfen!!!

    Gruß Friggel



  • Naja, wenn ich meine Kristallkugel aus Flensburg schon zurück hätte bestimmt 🤡

    Hast Du Zeiger in Deiner Klasse und den Kopierkonstruktor vergessen ? Oder einen Kopierkonstruktur falsch geschrieben ?

    Zeig mal bitte die Deklaration der Klasse.



  • Ich hab keinen kopierkonstruktor! Brauch ich den dazu???

    Gruß Friggel



  • Knuddlbaer schrieb:

    Zeig mal bitte die Deklaration der Klasse.



  • class CMitarbeiter
    {
    	private:
    
    		string name;
          string vorname;
          string gebDatum;
          int alter;
    
       public:
    
          void setName(string name);
    
          void setVorname(string vorname);
    
          void setGebDatum(string gebDatum);
    
          void setAlter(int alter);
    
          string getName()
          { return name; }
    
          string getVorname()
          { return vorname; }
    
          string getGebDatum()
          { return gebDatum; }
    
          int getAlter()
          { return alter; }
    };
    
    //Geburtstagsdatum setzen
    void CMitarbeiter::setGebDatum(string gebDatum)
    {
    	gebDatum =gebDatum;
    }
    
    //Name setzen
    void CMitarbeiter::setName(string name)
    {
    	name =name;
    }
    
    //Vorname setzen
    void CMitarbeiter::setVorname(string vorname)
    {
    	vorname = vorname;
    }
    
    //Alter setzen
    void CMitarbeiter::setAlter(int alter)
    {
    	alter = alter;
    }
    


  • FriggelTest schrieb:

    CMitarbeiter person = Vector[0];
    person.getName();
    

    Wo wird denn hier was ausgegeben?



  • getter methoden als const deklarieren, damit du auch auf konstante objekte zugreifen kannst.

    string getName() const;
    

    cu



  • person.getName() wird dann mit cout ausgegeben.

    newPerson = Perso_Verwaltung[0];
    
             cout << newPerson.getName();
    

    Den Kopierkonstruktor hab ich jetzt drin:

    CMitarbeiter(const CMitarbeiter & newPerson)
          {
          	name = name;
             vorname = vorname;
             gebDatum = gebDatum;
             alter = alter;
          }
    

    Warum geht das nicht???

    Gruß Friggel



  • Kopierkonstruktor brauchst du hier nicht (du hast keine zeiger). Das Problem liegt in der Funktion SetName!!!! It macht keine assignment.



  • Was macht setName???



  • FriggelTest schrieb:

    Was macht setName???

    Was macht
    x=x
    ?

    das liest sich somit wie
    'Lies den Wert der Variablen x aus und kopiere ihn in die Variable x'

    Und irgendwie wird da nicht viel getan - wozu soll ich den Wert von x nach x kopieren, wenn er ja sowieso schon in x steht?

    Wie wäre es mit
    this->vorname=vorname;

    this->vorname ist das vorname der Klasseninstanz und vorname der übergebene Parameter (welchen man btw per const reference übergeben sollte)



  • Hey cool danke, jetzt funktionierts natürlich!

    Ich glaub allein wär ich da jetzt nie drauf gekommen.

    Gruß Friggel


Anmelden zum Antworten