Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Record Vordefinieren... (https://www.delphipraxis.net/70552-record-vordefinieren.html)

glkgereon 31. Mai 2006 20:30


Record Vordefinieren...
 
Hi,

Ich weiss nicht genau wie ich mein Problem erklären soll... :gruebel:
Es geht im Prinzip darum dass ich zwei Typen habe (Array & Record) die sich gegenseitig als untertyp haben sollen...

beispiel:
Delphi-Quellcode:
 TNode = record end; //Platzhalter...
  TItem = (i1,i2,i3);
  TItems = array [TItem] of TNode;
  TNode = record //<<-- Fehler
    Count: Integer;
    HasSubs: Boolean;
    Case Boolean of
      True: (Sub: TItems);
      False: ();
    end;
  end;
nun kommt aber leider der Fehler "Bezeichner redefiniert" wo er ja auch irgendwie recht hat...Aber irgendwie muss es doich gehen...


BTW: funzt der Variant so? Ist so Standardmäßig Sub nicht vorhanden?

Dax 31. Mai 2006 20:32

Re: Record Vordefinieren...
 
Das geht nicht! Rekursive verschachtelungen sind aus gutem Grund verboten. Das gäbe in Nullzeit unendlichen hohen Speicherverbrauch ;)

Nimm besser Pointer auf Records oder, noch besser, gleich Klassen.

glkgereon 31. Mai 2006 20:34

Re: Record Vordefinieren...
 
Zitat:

Zitat von Dax
Das geht nicht! Rekursive verschachtelungen sind aus gutem Grund verboten. Das gäbe in Nullzeit unendlichen hohen Speicherverbrauch ;)

Nimm besser Pointer auf Records oder, noch besser, gleich Klassen.

:cry: :cry: :cry:

Wenn es mit dem Variant so klappt wie ich will dann nicht....

Und ich habe ehrlich gesagt da jetzt keinn lust für die 2 sachen mit klassen oder pointern rumzumachen :-/
geht es nicht irgendwie so?

(Wobei du prinzipiell ja recht hast...)

PS: ausserdem ist es ja auch nicht wirklich antwort auf meine frage.

Dax 31. Mai 2006 20:35

Re: Record Vordefinieren...
 
Nein. Der Record alloziert(...) direkt Platz für alles, inklusive größtem Teil der Variant-Sektion, die nun mal rekursive verschachtelungen definitiv einschließen..

glkgereon 31. Mai 2006 20:36

Re: Record Vordefinieren...
 
Zitat:

Zitat von Dax
Nein. Der Record alloziert(...) direkt Platz für alles, inklusive größtem Teil der Variant-Sektion, die nun mal rekursive verschachtelungen definitiv einschließen..

mist :-/

dann also doch klassen....

mkinzler 31. Mai 2006 20:47

Re: Record Vordefinieren...
 
Zitat:

dann also doch klassen....
Oder ne verkette Liste anstatt des Arrays. Denn Zeiger kann man forward deklarieren.

Delphi-Quellcode:
PNode = ^TNode;
TNode = record
    Count: Integer;
    HasSubs: Boolean;
    Case Boolean of
      True: (Sub: PNode);
      False: ();
    end;
  end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 Uhr.

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