Probleme mit doppelter Liste



  • Hallo, ich habe folgendes Problem:

    Wenn ich eine Liste aus Listen (mit einem PointF als Inhalt) erstelle,
    und jetzt versuche, der Liste in der zweiten Ebene ein Element zuzufügen, dann bewirkt das eine Änderung aller meiner Listenelemente in der ersten Ebene. Das Element wird auch in allen Einträgen der ersten Ebene zugefügt.

    Folgender Code macht das wohl etwas verständlicher:

    //Die Gesamtliste
    			List<List<PointF>^>^ Liste=gcnew List<List<PointF>^>;
    
    			//Zwischenliste für Punkte erstellen
    			List<PointF>^ punkte = gcnew List<PointF>;
    
    			punkte->Add(PointF(1,6));
    			punkte->Add(PointF(3,5));
    			punkte->Add(PointF(2,4));
    			punkte->Add(PointF(7,0));
    
    			//Zwischenliste dreimal in große Liste eintragen
    			Liste->Add(punkte);
    			Liste->Add(punkte);
    			Liste->Add(punkte);
    
    			//Debugausgabe: "Count" von allen Listenelementen
    			System::Diagnostics::Debug::WriteLine(Liste[0]->Count);
    			//-->Ausgabe: 4
    			System::Diagnostics::Debug::WriteLine(Liste[1]->Count);
    			//-->Ausgabe: 4
    			System::Diagnostics::Debug::WriteLine(Liste[2]->Count);
    			//-->Ausgabe: 4
    
                //Ok, alle Listeneinträge der ersten Ebene haben 4 Elemente der zweiten Ebene
    
    			//[b]Knackpunkt[/b]: NUR im zweiten Listeintrag noch einen Punkt an Stelle 2 einfügen
    			Liste[1]->Insert(2,PointF(9,8));
    
    			//Debugausgabe: "Count" von allen Listenelementen
    			System::Diagnostics::Debug::WriteLine(Liste[0]->Count);
    			//-->Ausgabe: 5
    			System::Diagnostics::Debug::WriteLine(Liste[1]->Count);
    			//-->Ausgabe: 5
    			System::Diagnostics::Debug::WriteLine(Liste[2]->Count);
    			//-->Ausgabe: 5
    
                //Jetzt haben alle Listeneinträge der ersten Ebene den Punkt zugewiesen bekommen, und nicht wie gewollt nur Liste[1]!
    

    Ich hoffe, mein Problem ist klar rübergekommen. Was mache ich falsch?

    Grüße,

    streikbrecher



  • Hallo,

    dein Problem ist, dass Du nur eine Liste der 2. Ebene erstellst. In der ersten Ebene hast die zwar drei Einträge, aber die drei Enträge zeigen auf eine identische Liste.

    Wenn Du unterschiedliche Einträge haben willst, musst Du auch unterschiedliche Instanzen der Listen erzeugen.


Anmelden zum Antworten