STL list<T>



  • Ich hab da ein kleines großes Problem mit STL Listen:

    ich hab eine Klasse attribute:

    class attribute {
    public:
    string attributeName;
    string attributeValue;
    attribute (string name, string value) {attributeName = name; attributeValue = value;}
    ~attribute () {}
    };
    

    eine Klasse A:

    class A {
    public:
    list<attribute> attributeList;
    void addAttribute (string name, string value) 
    {	
    attribute newItem(name, value);	
    attributeList.push_front(newItem);
    }
    void report()
    {
    // Der << operator in der attribute Klasse ist überschrieben
    ostream_iterator<attribute> out(cout, "\n");
    copy(attributeList.begin(), attributeList.end(), out);
    }
    };
    

    und eine Klasse B:

    class B{
    public:
    list<A> aList;
    void addA(A& a2Add) 
    {
    aList.push_back(a2Add);
    }
    void report()
    {
    list<A>::iterator iter;
    for (iter = aList.begin(); iter != aList.end(); iter++ )
    iter->report();
    }
    };
    

    mein Hauptprogramm sieht so aus:

    main()
    {
    A a1;
    a1.addAttribute("NAME1","VALUE1");
    B b1;
    b1.addA(a1);
    b1.report();
    a1.addAttribute("NAME2","VALUE2");
    b1.report();
    }
    

    So nun endlich zu meinem Problem:
    und zwar wird das zweite Attribute beim zweiten Aufruf der report() funktion aus B nicht angezeigt!
    Ich vermute das beim einfügen von a1 in die Liste von B nicht das Objekt eingefügt wird sondern nur eine Kopie! Und das neue Attribute wird in das ursprüngliche Objekt eingefügt und nicht in das in der Liste.
    Ich bin mir da aber nicht sicher...
    Weiß da jemand Rat... ich bin schon am verzweifeln! Hab nicht sehr viel Ahnung wie das intern in der STL abläuft!
    DANKE



  • Ja, du arbeitest innerhalb deiner Klassen mit einer Kopie von a1 und nicht mit
    a1 selbst.

    mfg
    v R



  • Wie kann ich das verhindern?????



  • Du koenntest einen Zeiger auf das Objekt speichern. Das bringt aber Gefahren mit
    sich: Wenn das lokale Objekt jetzt zerstoert wird, zeigst du auf kein gueltiges
    Objekt mehr.

    Stell doch einfach oeffentliche Schnittstellen zur Verfuegung, mit deren Hilfe
    du Attribute hinzufuegen kannst.

    mfg
    v R


Anmelden zum Antworten