| Autor |
Beitrag |
Pr0g3r
      
Beiträge: 44
Win XP
Turbo Pascal, Delphi 5&7, Ti-Basic
|
Verfasst: Mi 01.09.10 12:17
Hallo alle zusammen.
Ich habe folgendes Problem: Ich habe mit OOP ein Listenelement programmiert, welches sich selbst verwaltet.
Nun möchte ich gerne, dass die Liste ihren Vorgänger kennt.
Hat irgendjemand eine idee, wie man das bewerkstelligen kann?
//edit: Ich weiss, die Katerogie ist falsch... Moderiert von Narses: Topic aus Internet / Netzwerk verschoben am Mi 01.09.2010 um 12:23
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mi 01.09.10 12:21
Indem du eine Referenz auf das Objekt in der Liste vorher reinschmeißt.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Pr0g3r 
      
Beiträge: 44
Win XP
Turbo Pascal, Delphi 5&7, Ti-Basic
|
Verfasst: Mi 01.09.10 12:29
Vielleicht noch mal zum Verständnis:
Das Listenelement created sich selbst noch mal um ein neues Element dranzumachen.
Für den Vorgänger müsste man sich also selbst mitgeben. Wie geht das?
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Mi 01.09.10 13:12
Indem man beim erstellen eine Referenz auf Self übergibt? Oder hab ich die Frage nicht verstanden?
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
Pr0g3r 
      
Beiträge: 44
Win XP
Turbo Pascal, Delphi 5&7, Ti-Basic
|
Verfasst: Mo 06.09.10 16:50
also
next := Liste.Create(self); ?
|
|
elundril
      
Beiträge: 3747
Erhaltene Danke: 123
Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
|
Verfasst: Mo 06.09.10 18:06
Wir wissen leider nicht wie du deine liste ausprogrammiert hast. Insofern können wir dir auch keinen konkreten Code liefern.
lg elundril
_________________ This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
|
|
Pr0g3r 
      
Beiträge: 44
Win XP
Turbo Pascal, Delphi 5&7, Ti-Basic
|
Verfasst: Di 07.09.10 11:13
die Liste habe ich wie folgt deklariert:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TListe = class
protected zInhalt: TObject; znext: TListe; zprev: Tliste;
public constructor create(plast: TListe; pInhalt: TObject); [...] |
ALso müsste ich den constructor so aufrufen:
next := znext := TListe.Create( self,pInhalt); ?
Moderiert von Narses: Delphi-Tags hinzugefügt
|
|
Nersgatt
      
Beiträge: 1581
Erhaltene Danke: 279
Delphi 10 Seattle Prof.
|
Verfasst: Di 07.09.10 11:24
Probiers doch mal aus. 
_________________ Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
|
|
martin300
      
Beiträge: 186
Erhaltene Danke: 2
|
Verfasst: Di 07.09.10 11:56
Hallo,
dein Konzept ist sehr eigenartig. Aber wenn ich es machen würde, dann hätte ich eine Klasse Liste (die kann die Liste verwalten, dh. Einträge hinzufügen, löschen, speichern) und dann noch eine Klasse Eintrag (dort steht der zu speichernde Eintrag, oder was auch immer). Dann erzeuge ich die Liste und beliebig viele Einträge die hinzugefügt werden.
|
|
Nait
Hält's aus hier
Beiträge: 10
|
Verfasst: Di 07.09.10 21:48
Ah, ein ähnliches Problem hatte ich auch letztens. Ich bin zwar neu in der OOP, habe aber ein effektives Verfahren aus der strukturierten Programmierung angewandt und es funktioniert bei meinen Klassen. Dort kannst du zB einem record-Typ nicht sich selbst als Eigenschaft mitgeben, sondern musst vorher einen Pointer vereinbaren. Bei dir sehe das also so aus:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| type PTListe = ^TListe; TListe = class
protected zInhalt: TObject; znext: PTListe; zprev: PTliste;
public constructor Create(plast: PTListe; pInhalt: TObject); [...] end;
var ListenAnfang, ListenEnde: PTListe; |
Konstruktor entsprechend:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| constructor TListe.Create(plast: PTListe; pInhalt: TObject); begin zInhalt:= pInhalt; zprev:= plast; New(znext); znext^.Create(zprev^.znext, zInhalt); end; |
So wie es jetzt ist, wirds natürlich ne Endlosschleife, also noch nen globalen Zähler mit einfügen. Und das Create-Ereignis im Create muss in ein if-then, für das erste Element (weil das kein vorheriges hat). Ähnlich ist auf das letzte Element zu achten.
Persönlicher Tipp: es existiert bereits TList und da ist schon alles wichtige drin
|
|
Pr0g3r 
      
Beiträge: 44
Win XP
Turbo Pascal, Delphi 5&7, Ti-Basic
|
Verfasst: Mi 08.09.10 12:11
hat sich erledigt.
Das mit dem self hat geklappt, ich konnte es nur nicht ausprobieren, da das ganze Zeug auf dem Schulserver vergammelt...
Trotzdem Danke
|
|