AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Record als Eigenschaft von sich selber

Ein Thema von MisterNiceGuy · begonnen am 19. Jan 2010 · letzter Beitrag vom 19. Jan 2010
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#1

Record als Eigenschaft von sich selber

  Alt 19. Jan 2010, 13:30
Schwer dieses Thema zu beschreiben, ich zeig mal an einem Beispiel was ich erreichen möchte:

Delphi-Quellcode:
type TAst = record
   UnterAst : TAst;
end;
Ich möchte also, dass mein Record sich selbst als Unterlement besitzt. Geht das irgendwie?
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Benutzerbild von Reinhardtinho
Reinhardtinho

Registriert seit: 26. Feb 2007
411 Beiträge
 
Delphi 5 Enterprise
 
#2

Re: Record als Eigenschaft von sich selber

  Alt 19. Jan 2010, 13:37
Ich kenne es so, das man bei einem Record einen Zeiger auf den nächsten Record hat.

Delphi-Quellcode:
type
  PAst = ^TAst;
  TAst = record
    UnterAst : PAst;
  end;
end;
Ich habe viel von meinem Geld für Alkohol, Weiber und schnelle Autos ausgegeben ... Den Rest habe ich einfach verpraßt.

George Best - 22.05.1946 - 25.11.2005 - nordirischer Fußballspieler
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#3

Re: Record als Eigenschaft von sich selber

  Alt 19. Jan 2010, 13:44
Danke das geht, dann wirds wohl ein Pointer...
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Benutzerbild von uligerhardt
uligerhardt

Registriert seit: 19. Aug 2004
Ort: Hof/Saale
1.702 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Record als Eigenschaft von sich selber

  Alt 19. Jan 2010, 13:56
Zitat von MisterNiceGuy:
Delphi-Quellcode:
type TAst = record
   UnterAst : TAst;
end;
Überleg dir mal, wie eine Variable von diesem Typ im Speicher ausschauen würde.
Vor allem, wenn UnterAst nicht das einzige Feld in TAst wäre.
Uli Gerhardt
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#5

Re: Record als Eigenschaft von sich selber

  Alt 19. Jan 2010, 13:57
Bei solchen Sachen würde ich dann auch eher zu Klassen tendieren, da diese da einfach mächtiger sind. Dort hast du auch einfach mehr Flexibilität.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.731 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Record als Eigenschaft von sich selber

  Alt 19. Jan 2010, 14:08
Grund: Der Record ist zu diesem Zeitpunkt (also innerhlab seiner eigenen Deklaration) noch nicht fertig.
Der Compiler weiß also noch nicht wie groß dieser mal wird
und kann demnach die Position des nächsten Feldes nicht berechnen.

Grund2: Dieses würde einen unendlichgroßen Record ergeben,
welches einfach nicht möglich ist.
> der Record wäre ja unendlich Mal in sich selber verschachtelt


Bei Objekten geht das, da dort zum Zeitpunkt der Kompilierung die Größe des Instanzzeigers ja schon feststeht.
Und da eine Klasse ein Zeiger ist, wird dieses auch nur einmal verschachtelt.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.628 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Record als Eigenschaft von sich selber

  Alt 19. Jan 2010, 15:07
In Delphi muss bei solchen Strukturen in einer Klasse (wegen Grund 1) zudem eine Forward-Deklaration vorgenommen werden:
Delphi-Quellcode:
type
  TFoo = class;
  TFoo = class(TBar)
  private
    FSubFoo: TFoo;
  public
    // bla
  end;
Schaut erstmal nicht wirklich intuitiv aus, daher sei's gesagt.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.731 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Record als Eigenschaft von sich selber

  Alt 19. Jan 2010, 15:16
Zitat von Medium:
Forward-Deklaration vorgenommen werden:
Die Forward-Deklaration ist hier nicht nötig, da der Typ schon bekannt ust und auch daß es sich um eine Klasse handelt.
(aber schaden tut's zumindestens nichts)

Das Problem liegt z.B. hier an der Tatsache, daß TFuu erst später deklariert wird und zu diesem Zeitpunkt also noch unbekannt ist.
Delphi-Quellcode:
type
  TFuu = class;
  TFoo = class(TBier)
    FSubFuu: TFuu;
  end;
  TFuu = class(TBar)
  end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.628 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Record als Eigenschaft von sich selber

  Alt 19. Jan 2010, 15:33
Wa echt? Hui, dann hab ich das wohl mit 2 Klassen die sich gegenseitig referenzieren verdurmschelt. Scusi
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.658 Beiträge
 
Delphi 7 Personal
 
#10

Re: Record als Eigenschaft von sich selber

  Alt 19. Jan 2010, 16:16
@MisterNiceGuy

Wozu soll das Gut sein?
irgendwie reicht meine Phantasie nicht dafür aus.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf