Autor Beitrag
Pr0g3r
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win XP
Turbo Pascal, Delphi 5&7, Ti-Basic
BeitragVerfasst: 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 user profile iconNarses: Topic aus Internet / Netzwerk verschoben am Mi 01.09.2010 um 12:23
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win XP
Turbo Pascal, Delphi 5&7, Ti-Basic
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win XP
Turbo Pascal, Delphi 5&7, Ti-Basic
BeitragVerfasst: Mo 06.09.10 16:50 
also

next := Liste.Create(self); ?
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win XP
Turbo Pascal, Delphi 5&7, Ti-Basic
BeitragVerfasst: Di 07.09.10 11:13 
die Liste habe ich wie folgt deklariert:
ausblenden 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 user profile iconNarses: Delphi-Tags hinzugefügt
Nersgatt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1581
Erhaltene Danke: 279


Delphi 10 Seattle Prof.
BeitragVerfasst: Di 07.09.10 11:24 
Probiers doch mal aus. :roll:

_________________
Gruß, Jens
Zuerst ignorieren sie dich, dann lachen sie über dich, dann bekämpfen sie dich und dann gewinnst du. (Mahatma Gandhi)
martin300
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 186
Erhaltene Danke: 2



BeitragVerfasst: 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



BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
type
  PTListe = ^TListe; //Zeiger auf eine TListe
  TListe = class

  protected
    zInhalt: TObject;
    znext: PTListe;
    zprev: PTliste;

  public
    constructor Create(plast: PTListe; pInhalt: TObject);
  [...]
end;{class.TListe}

var
  ListenAnfang, ListenEnde: PTListe;

Konstruktor entsprechend:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
constructor TListe.Create(plast: PTListe; pInhalt: TObject);
begin
  zInhalt:= pInhalt; //Inhalt übernehmen
  zprev:= plast; //auf vorherigen zeigen
  New(znext); //initialisiert Pointer für nächsten
  znext^.Create(zprev^.znext, zInhalt);
    //zprev^.znext ist DIESER Zeiger, der ja dann der vorherige ist
end;{constructor.TListe.Create}

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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 44

Win XP
Turbo Pascal, Delphi 5&7, Ti-Basic
BeitragVerfasst: 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