Problem mit Liste in Struktur
-
Hmm, das ist dann aber in 2003 fehlerhaft.
Falsch.
Du hast ja in der struct S eine Variable die eine Liste von S enthält
Nein hat er nicht.
Der Programmausschnitt ist ok, der VC6 etwas übereilig mit dem Instanziieren von list<S>. Eine Lösung für dein Problem kenne ich aber leider auch nicht.
-
Original erstellt von HumeSikkins:
Der Programmausschnitt ist ok, der VC6 etwas übereilig mit dem Instanziieren von list<S>.Dacht ichs mir doch ...
Original erstellt von HumeSikkins:
Eine Lösung für dein Problem kenne ich aber leider auch nicht.Das allerdings net
Wenn ich da keinen Workaround finde, der trotzdem die listen und iteratoren beinhaltet, so hab ich ein mittelschweres Problem
-
Hallo,
eine Lösung des Problems besteht in der Installation einer anderen STL-Implementation. Mit der STLPort z.B. funktioniert der Code auch mit dem VC 6 problemlos. Eine andere Lösung wäre die Verwendung eines anderen Containers.Ansonsten fallen mir nur noch irgendwelche komischen Hacks ein. Aber ich bin auch nicht sonderlich kreativ, wenn es um Workarounds geht.
Vielleicht hat ja wer anders noch viel bessere Ideen.
[ Dieser Beitrag wurde am 23.06.2003 um 18:27 Uhr von HumeSikkins editiert. ]
-
Anforderung lautet: Code muss unter 6.0, 2002 und 2003 kompilierbar sein.
-
Anforderung lautet: Code muss unter 6.0, 2002 und 2003 kompilierbar sein.
Zwingend mit der nativen STL-Implementation?
Zwingend mit einer Liste?Zwingend genau gleicher Code?
-
Original erstellt von HumeSikkins:
Zwingend mit der nativen STL-Implementation?Ja
Original erstellt von HumeSikkins:
Zwingend mit einer Liste?Die wär für meine Anforderungen ideal, siehe auch: Container, bei dem die Adressen der Elemente sich nicht verändern
Original erstellt von HumeSikkins:
Zwingend genau gleicher Code?Nein, ist aber schon ziemlich viel und getestet.
-
Hm, niemand mehr ne Idee?
-
Wenn du dich damit abfinden könntest, versuch mal list<S*>.
-
Ne, das is nix. Da muss ich mich ja um die Vernichtung dann kümmern. Das wollte ich eigentlich vermeiden.
-
Hi,
kann man ein struct nicht vorwaertsdeklarieren?
Ich meine, dass man vielleicht sowas schreibt:
strcut S; struct S { list<S>::iterator p; };
Kann mich aber auch irren, kann es jetzt im moment nicht ausprobieren
mfg
v R
-
Original erstellt von dEUs:
Ne, das is nix. Da muss ich mich ja um die Vernichtung dann kümmern. Das wollte ich eigentlich vermeiden.schreib dir einen wrapper um std::list
welcher std::list als member hat und alle methoden bereitstellt - und du ergänzt erase(), clear(), dtor mit den nötigen deletes.
ich halte das für ne vernünftige lösung (so mache ich es auch wenn ich einen vector mit zeigern brauche)
einziger nachteil den ich sehe ist, dass alles am heap liegt (etwas langsamer als am stack)
-
kann man ein struct nicht vorwaertsdeklarieren?
Ich meine, dass man vielleicht sowas schreibt:
strcut S;
struct S
{
list<S>::iterator p;
};Kann mich aber auch irren, kann es jetzt im moment nicht ausprobieren
Vergesst was ich geschrieben hab, ich hab nicht nachgedacht!
mfg
v R
-
Hallo,
also wenn es wirklich eine Liste sein soll, dann sehe ich nur eine wirklich einfache Lösung:Schreib dir ne eigene Listenklasse. Natürlich nicht von Grund auf sondern auf Basis einer STL-Liste.
Wenn's nur um die Gültigkeit von Iteratoren geht, kannst du auch eine set (multiset) verwenden.
-
hm, so wies aussieht, kann ich bei mir die list einfach durch ein set ersetzen, oder?
-
hm, so wies aussieht, kann ich bei mir die list einfach durch ein set ersetzen, oder?
Ups. Leider doch nicht. Selbes Problem
-
hm, ok ... dann werd ich das mit der eigenen listenklasse + interne std::list + zeiger machen. ist das beste, da ich meine klasse nach aussen hin genauso aussehen lassen kann, wie std::list.