Hallo!
Ich möchte ein Programm schreiben, dass in einer doppelt verketteten Ringliste Datenobjekte verwaltet und hänge an einem Verständnis-Problem fest.
Ich habe eine Klasse "Liste" geschrieben, die aus einer Klasse "Elemente" abgeleitet ist und diese Listenelemente zusammenfügt. Ein Element hat drei Zeiger, einen auf das vorhergehende, einen auf das nachfolgende Element und einen auf das Datenobjekt des Listeneintrags, ein Objekt der Klasse "Objekt".
Wenn ich mir eine Funktion schreibe, die aus eingegebenen Strings z.B. ein Objekt der Klasse "Person", die von "Objekt"abgeleitet ist, zusammenstellt und in die Liste einordnet, wird das Objekt beim Verlassen der Funktion wieder zerstört (logisch) und der Zeiger der Liste auf das Datenobjekt zeigt ins Leere.
Ich komme nicht darauf, wie ich das Objekt dauerhaft an die Liste übergeben kann und wie ich es ich es dann ggf. beim Löschen oder Abbauen der Liste wieder loswerde? Wahrscheinlich denke ich noch zu sehr in "C" und Pointern?
Es ist zwar schon etwas spät, aber ich hoffe, meine Ausfühungen sind einigermaßen verständlich. Wenn Codeschnipsel gewünscht sind, reiche ich die gern noch nach.
Auf Denkanstöße hoffend und freundlich grüßend,
Erik
On Mon, Sep 30, 2002 at 09:53:32PM +0200, Erik Schanze wrote:
Hallo!
Hi Erik,
Ich möchte ein Programm schreiben, dass in einer doppelt verketteten Ringliste Datenobjekte verwaltet und hänge an einem Verständnis-Problem fest.
Ich habe eine Klasse "Liste" geschrieben, die aus einer Klasse "Elemente" abgeleitet ist und diese Listenelemente zusammenfügt. Ein Element hat drei Zeiger, einen auf das vorhergehende, einen auf das nachfolgende Element und einen auf das Datenobjekt des Listeneintrags, ein Objekt der Klasse "Objekt".
Wenn ich mir eine Funktion schreibe, die aus eingegebenen Strings z.B. ein Objekt der Klasse "Person", die von "Objekt"abgeleitet ist, zusammenstellt und in die Liste einordnet, wird das Objekt beim Verlassen der Funktion wieder zerstört (logisch) und der Zeiger der Liste auf das Datenobjekt zeigt ins Leere.
Das muss nicht sein. Normalerweise ist eine Liste nur ein Container für Objekte oder ObjektPointer. Im letzteren (deinem) Fall hat die Liste nichts mit dem Löschen der Datenobjekte zu tun, sondern verwaltet nur Pointer die auf Datenobjekte die vorher irgendwo mittels 'new' erzeugt worden.
Deine Listenklasse muss also nur die Methoden
void add( T *ptr ); void remove( T *ptr ); T* get( int pos );
anbieten, welche die Pointer entgegennehmen und intern dem DatenPointer des ListenElements zuordnen, bzw. zurückgeben oder ebend das DatenElement entfernen.
T ist übrigens ein Template-Typ.
Ciao, Tobias
hallo,
1) das personenobjekt sollte dynamisch erzeugt werden, damit es (logisch ;-) nicht am ende der funktion zerstört wird.
2) der listendestruktor sollte über die liste laufen und alle vorhandenen elemente löschen, sowas wie //interner listenzeiger Object* current; while(current->next){ current->next = current->next->next; delete current->next; }
gruß aus bautzen ralf wilke
Am 30. September 2002 schrieb Erik Schanze: ^^^^^^^^^^^^^^^^^^
[...]
Hallo!
Danke für Eure ANtworten, aber das Problem habe ich schon vor zwei Wochen gelöst.
Freundlich grüßend,
Erik
lug-dd@mailman.schlittermann.de