Verkettung von Objekten
-
Hallo,
ich habe ein Problem mit meinem Programm. Bereits einfache Set-Methoden funktionieren bei mir nicht. Ich weiß, dass ich da ein Fehler mit den Adressen und Speichern habe, leider weiß ich nicht, wie ich es beheben soll. Ich habe das Problem separiert und hier zu einer lauffähigen main zusammengefasst:
#include <string> #include <vector> #include <iostream> using namespace std; class CJob { public: CJob(); CJob(string kunde){ m_Client = kunde; } void SetClient(string _client){ m_Client = _client;} string GetClient() { return m_Client; } void SetDemand(double _Demand){ this->m_Demand = _Demand; } double GetDemand(){ return this->m_Demand; } private: string m_Client; double m_Demand; }; class CProduct { public: CProduct(); CProduct(string _name){ m_Name = _name; } void SetName(string _name){ this->m_Name = _name;} string GetName() { return m_Name; } void AddJob(CJob _job){ m_Jobs.push_back( _job); } void AddJob(string kunde, int NT); vector <CJob> GetJobs(){return m_Jobs;} private: string m_Name; vector <CJob> m_Jobs; }; int main(int argc, char *argv[]){ CProduct Produkt1("Bier"); CJob Job1("Berlin"); CJob Job2("Bonn"); Produkt1.AddJob(Job1); Produkt1.AddJob(Job2); Produkt1.GetJobs().at(0).SetClient("Hamburg"); Produkt1.GetJobs().at(0).SetDemand(3.0); Produkt1.GetJobs().at(1).SetDemand(5.0); for(int i=0; i<2; i++){ cout << Produkt1.GetName() << " "; cout << Produkt1.GetJobs().at(i).GetClient() << " "; cout << Produkt1.GetJobs().at(i).GetDemand() << "\n"; } return 0; }
Ich wünschte die Ausgabe:
Bier Hamburg 3.0 Bier Bonn 5.0
Stattdessen bekomme ich:
Bier Berlin 1.34646e-312 Bier Bonn 6.95254e-310
Ich habe bereits mit & und * rumprobiert, führt aber alles bei mir zu einer Fehlermeldung....
Das Lösung ist für euch bestimmt super einfach, würde mich freuen, wenn mir da jemand weiterhelfen könnte....
Viele Dank
-
GetJobs gibt eine Kopie zurück.
-
Tja, rumprobieren hilft leider in der Regel wenig
Dein GetJobs() gibt eine Kopie von m_jobs zurück. Wenn du in der Kopie was änderst, kommt das aber nicht zurück nach m_jobs.
Eine einfache Lösung wäre eine Referenz zurück zu geben:
vector <CJob>& GetJobs(){return m_Jobs;}
-
Ah, perfekt! Jetzt funktioniert alles. Vielen Dank!