Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler: TYP noch nicht vollständig deklariert (https://www.delphipraxis.net/87238-fehler-typ-noch-nicht-vollstaendig-deklariert.html)

Zacherl 25. Feb 2007 17:32


Fehler: TYP noch nicht vollständig deklariert
 
Hi,

ich habe versucht folgenden Typ zu deklarieren:

Delphi-Quellcode:
type
  TCatData = record
    Caption: string;
    ImageIndex: integer;
    SubCats: array of TCatData; <-- Fehler: TCatData wurde noch nicht vollständig deklariert
  end;
Nun bekomme ich den Fehler: "TCatData wurde noch nicht vollständig deklariert". Mir ist grade entfallen, wie ich Typen vordefinieren kann.

Helft mir auf die Sprünge bitte :D

Robert Marquardt 25. Feb 2007 17:36

Re: Fehler: TYP noch nicht vollständig deklariert
 
Das geht gar nicht. Der Compiler will herausbekommen wie gross das record ist und das ist bei so einer rekursiven Deklaration unmoeglich.
Es geht das du Zeiger auf das record benutzen kannst. Diese kann man vor der record Deklaration im gleichen type Bereich deklarieren.
Es ginge wenn der Compiler ein Mehrpass-compiler waere, aber ein Pascal-Compiler ist nun mal traditionell ein Einpass-Compiler.

Daniel G 25. Feb 2007 17:36

Re: Fehler: TYP noch nicht vollständig deklariert
 
Äh... geht das überhaupt? Ich meine, Subdata ist vom Typ TCatData. Und Subdata ist in TCatData deklariert.

//Edit: Rekursiv... Das Wort hatte ich gesucht. :wall: Na ja, Robert war schneller... :stupid:

Zacherl 25. Feb 2007 17:42

Re: Fehler: TYP noch nicht vollständig deklariert
 
Okey, vielen Dank:

Delphi-Quellcode:
type
  PCatData = ^TCatData;
  TCatData = record
    Caption: string;
    ImageIndex: integer;
    SubCats: array of PCatData;
  end;
so geht es ..

//Edit: Und ja, es soll sogar rekursiv sein, weil ich eine rekursive Funktion mit den Datensätzen füttere :D

hoika 25. Feb 2007 18:28

Re: Fehler: TYP noch nicht vollständig deklariert
 
Hallo,

mit forward geht es auch
Delphi-Quellcode:
type
  TCatData = record; forward;

  TCatData = record
    Caption: string;
    ImageIndex: integer;
    SubCats: array of TCatData;
  end;

Heiko

Hawkeye219 25. Feb 2007 19:00

Re: Fehler: TYP noch nicht vollständig deklariert
 
Zitat:

Zitat von hoika
mit forward geht es auch

Heiko, mit welcher Delphi-Version hast du es getestet?

Gruß Hawkeye

hoika 26. Feb 2007 06:21

Re: Fehler: TYP noch nicht vollständig deklariert
 
Hallo,

war aber nur so getippert *zugeb*

Bei Klassen würde das gehen, bei Records wohl nicth.
Wieder ein Grund, gleich Klassen zu benutzen ... ;)

Delphi-Quellcode:
type
  TCatData = class;

  TCatData = class
    Caption: string;
    ImageIndex: integer;
    SubCats: array of TCatData;
  end;
Aber in diesem Fall würde ich eh TList (oder einen Abkömmling)
anstatt des arrays benutzen,
auch wenn Pointer das vereinfachen.


Heiko

Zacherl 26. Feb 2007 06:25

Re: Fehler: TYP noch nicht vollständig deklariert
 
Danach suchte ich .. habe dann aber auch gemerkt, dass es nur mit Objecten geht. Der ganze Record hat nur den Sinn intern eine Struktur darzustellen, welche dann später auf einen VirtualStringTree übertragen wird.
Da lohnte es sich nicht extra mit Objecten zu arbeiten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:16 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