Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Innerhalb eines Typ (record) den gleichen Typ verwenden? (https://www.delphipraxis.net/128230-innerhalb-eines-typ-record-den-gleichen-typ-verwenden.html)

Mike07 26. Jan 2009 16:06


Innerhalb eines Typ (record) den gleichen Typ verwenden?
 
Gibt es eine Möglichkeit für das im Titel beschriebene Problem (hoffe das es verständlich ist)?

Hier mal ein konkretes Beispiel von mir:

Delphi-Quellcode:
    TPunkt = record
    X: integer;
    Y: integer;
    Abstand: real;
    Index: cardinal;
    Punkt1, Punkt2: TPunkt;
end;
So würde ich es am liebsten haben, aber das funktioniert nicht.
Als Abhilfe habe ich jetzt erstmal TPoint genommen, aber das wirft bei meinem Programm wieder andere Probleme auf...
Könnte man das irgendwie mit Zeigern machen oder geht das grundsätzlich nicht?

mkinzler 26. Jan 2009 16:08

Re: Innerhalb eines Typ (record) den gleichen Typ verwenden?
 
Mit Zeigern würde es gehen:
Delphi-Quellcode:
PPunkt = ^TPunkt;
TPunkt = record
    X: integer;
    Y: integer;
    Abstand: real;
    Index: cardinal;
    Punkt1, Punkt2: PPunkt;
end;
Ohne aber nicht.

Mike07 26. Jan 2009 16:22

Re: Innerhalb eines Typ (record) den gleichen Typ verwenden?
 
ah, danke...das teste ich gleich mal aus!

Meflin 26. Jan 2009 16:27

Re: Innerhalb eines Typ (record) den gleichen Typ verwenden?
 
So wie du das gepostet hast, solltest du dir allerdings Gedanken darüber machen, ob das vom OOP-Gedanken her sinnvoll ist.

Ein Punkt ist eben erstmal nur X,Y. Was darüber hinausgeht, wird von Punkt abgeleitet oder Punkt wird in anderen Klassen verwendet, aber kaum in sich selber :stupid:

mkinzler 26. Jan 2009 16:29

Re: Innerhalb eines Typ (record) den gleichen Typ verwenden?
 
Z.B. in eigener Listenklasse TPunktListe o.ä.

himitsu 26. Jan 2009 16:30

Re: Innerhalb eines Typ (record) den gleichen Typ verwenden?
 
Aber vergiß nicht, für TPunkt muß natürlich Speicher reserviert werden.
Delphi-Quellcode:
PPunkt := ^TPunkt;
TPunkt = record
  ...
  Punkt1, Punkt2: PPunkt;
end;
und das Volgendes nicht geht, könntest du dir eventuell selber denken.
Delphi-Quellcode:
TPunkt = record
  ...
  Punkt1, Punkt2: TPunkt;
end;
Denn als Typ (PPunkt ist nur als Pointer) wird immer der Platz reserviert, welcher der Typ belegt
und da so immer wieder der Typ in sich selber drin wäre, dann würde dieses in einer Endlosschleife enden und unendlich Speicher benötigen :zwinker: .
Delphi-Quellcode:
TPunkt = record
  ...
  Punkt1, Punkt2 = record
    ...
    Punkt1, Punkt2 = record
      ...
      Punkt1, Punkt2 = record
        ...
        Punkt1, Punkt2 = record
          ...
          Punkt1, Punkt2: ....................
        end;
      end;
    end;
  end;
end;
[add]
stimmt, *auf nachfolgenden Post guck*

er ist ja 2-mal in sich drin ... getrennt sieht's natürlich noch schlimmer aus
Delphi-Quellcode:
TPunkt = record
  ...
  Punkt1 = {TPunkt}record
    ...
    Punkt1 = {TPunkt}record
      ...
      Punkt1 = {TPunkt}record
        ...
        Punkt1: ...
        Pinkt2: ...
      end;
      Punkt2 = {TPunkt}record
        ...
        Punkt1: ...
        Pinkt2: ...
      end;
    end;
    Punkt2 = {TPunkt}record
      ...
      Punkt1 = {TPunkt}record
        ...
        Punkt1: ...
        Pinkt2: ...
      end;
      Punkt2 = {TPunkt}record
        ...
        Punkt1: ...
        Pinkt2: ...
      end;
    end;
  end;
  Punkt2 = {TPunkt}record
    ...
    Punkt1 = {TPunkt}record
      ...
      Punkt1 = {TPunkt}record
        ...
        Punkt1: ...
        Pinkt2: ...
      end;
      Punkt2 = {TPunkt}record
        ...
        Punkt1: ...
        Pinkt2: ...
      end;
    end;
    Punkt2 = {TPunkt}record
      ...
      Punkt1 = {TPunkt}record
        ...
        Punkt1: ...
        Pinkt2: ...
      end;
      Punkt2 = {TPunkt}record
        ...
        Punkt1: ...
        Pinkt2: ...
      end;
    end;
  end;
end;

uligerhardt 26. Jan 2009 16:32

Re: Innerhalb eines Typ (record) den gleichen Typ verwenden?
 
Na, überleg dir lieber erstmal etwas genauer, was du willst: Dein Code-Fragment würde einen Recordtyp definieren, der u.a. 2x sich selbst zur Gänze enthalten würde. Da seh ich ein logisches Problem. :mrgreen:

Mike07 26. Jan 2009 16:56

Re: Innerhalb eines Typ (record) den gleichen Typ verwenden?
 
ja, das ist wohl wahr...ich wusste aber ja nicht wie ich das sonst machen sollte und um das darzustellen, was ich so grob wollte, habe ich mich eben meines 1. Irrtums bedient ;-)

ansonsten stellen Punkt1 und Punkt2 Punkte da, die in Beziehung zu TPunkt stehen...

himitsu 26. Jan 2009 18:00

Re: Innerhalb eines Typ (record) den gleichen Typ verwenden?
 
keine Sorge, zum Lernen sind wir ja hier ... außerdem sind diesem Irrtum schon viele erlegen (hatte es auch mal versucht :stupid: )

Mike07 2. Feb 2009 21:52

Re: Innerhalb eines Typ (record) den gleichen Typ verwenden?
 
dann bin ich ja beruhigt ;-)
naja, ich muss auch noch viel lernen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.
Seite 1 von 2  1 2      

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