Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Verkettete Liste in Klasse? (https://www.delphipraxis.net/30421-verkettete-liste-klasse.html)

Pseudemys Nelsoni 24. Sep 2004 14:23


Verkettete Liste in Klasse?
 
hoi,

ich würd gern meine gelinkte liste in eine klasse unterbringen, damit ich diese ganzen "listendurchlaufen" etc in meinem hauptprogramm habe...

nun meine frage, wie erstell ich in meiner klasse dann die vorwärtsdeklaration? den rekord möcht ich ja erst zur laufzeit übergeben....geht das?

sowas wie:

Delphi-Quellcode:
PLinkedList = ^TLinkedList
TLinkedList = hierderrecorddenichnachherübergebe
end;
?

JasonDX 24. Sep 2004 14:28

Re: Verkettete Liste in Klasse?
 
Du könntest
1. Den Pointer auf das Record nehmen und den speicher dafür reservieren oder
2. Variants verwenden (<-bin aber nicht sicher, ob das wirklich gut&einfach geht)

Pseudemys Nelsoni 24. Sep 2004 14:31

Re: Verkettete Liste in Klasse?
 
Zitat:

Den Pointer auf das Record nehmen und den speicher dafür reservieren
hättest du n beispiel dafür?

jfheins 24. Sep 2004 14:35

Re: Verkettete Liste in Klasse?
 
Das geht !

Zum Quellcode
Delphi-Quellcode:
type
PLinkedList = ^TLinkedList
TLinkedList = record
               zeiger: PLinkedList
              end;
Mein Delphi-Buch hat dazu folgendes geschrieben:
Dieser Typ (TLinkedList) ist bei Deklaration von PLinkedList noch gar nicht definiert !
Was normalerweise nicht möglich wäre, erlaubt uns Delphi hier. Denn erst danach definieren wir den Typ TLinkedList.
... erlaubt es uns also, auf einen solchen Record zu zeigen, wie der, in dem er sich selbst befindet!

Eine solche Deklaration nennt man Vorwärtsdeklaration.

Pseudemys Nelsoni 24. Sep 2004 14:37

Re: Verkettete Liste in Klasse?
 
Moin heins,

danke für die Mühe 8) Das das geht weiss ich schon, ich benutze sie ja schon lange, nur weiss ich nicht wie das geht wenn ich den rekord erst zur laufzeit übergeben möchte an die klasse :zwinker:

EDIT: übrigens das buch habe ich auch, "jetzt lerne ich delphi" :thumb: :mrgreen:

JasonDX 24. Sep 2004 14:43

Re: Verkettete Liste in Klasse?
 
Andere möglichkeit: Der Pointer auf die Variable, anstatt aufs Record:
Du brauchst den Record, wenn du elemente hinzufügen, löschen oder abfragen willst, richtig?
Was ich mir gedacht hab war, dass du da nicht die Variable übergibst, sondern den Zeiger auf die Variable. Dann interessiert dich das Record in der klasse nichts mehr, und du arbeitest halt mit memCopy, memAlloc und FreeMem. (Wenn du dann das ganze sortieren willst, gehts dann wahrscheinlich auch noch schneller :-D )

Pseudemys Nelsoni 24. Sep 2004 14:48

Re: Verkettete Liste in Klasse?
 
genau, ich möchte aus der liste löschen/hinzufügen können. Muss ich keinen "next" zeiger im rekord haben?

Zitat:

memCopy, memAlloc und FreeMem
habe ich nie benutzt :oops: gehts auch new() und dispose() ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz