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! 😃


Anmelden zum Antworten