Autor Beitrag
K_wave
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 08.05.08 12:24 
Hallo zusammen!

ich habe eine Frage zum Deklarieren von Typen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
   TCustomTreeObjectArray=array of TCustomTreeObject;
    TCustomTreeObject=class(TObject)
        private
               myParent:TCustomTreeObject;
        public
               function GetChilds:TCustomTreeObjectArray;
    end;


Definiere ich TCustomTreeObjectArray NACH TCustomTreeObject dann kennt die Klasse TCustomTreeObject den Typen TCustomTreeObjectArray nicht.
Definiere ich TCustomTreeObjectArray VOR TCustomTreeObject dann kennt die Definition von TCustomTreeObjectArray den Typen TCustomTreeObject nicht.

Ich könnte z.B. TCustomTreeObjectArray als array of TObject deklarieren, ist aber unschön da ich dann jedes mal wieder auf TCustomTreeObject casten müsste.

Wie kann ich dieses Problem Lösen? Gibt es in Delphi eine Möglichkeit erweiterte Prototypen zu definieren?

Vielen Dank
Grüsse
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 08.05.08 12:29 
Dazu gibts die Foreward deklaration. In Ada gehts so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
type X; //in delphi schreibt man hier irgendwie das Schlüsselwort 'forward' hin.
type Y is record
  a : Integer;
  b : X;
end record;

type X is access Y; //wobei access heißt: X ist pointer auf Y, nur ein beispiel.


Aber das is nich so einfach in delphi portierbar, such einfach mal nach "Forward deklaration" oder nur "forward"
;)

Der Sinn dahinter ist, dem Compiler erstmal zu sagen: "Hier, den typen X, den gibt's. Wie der aussieht sag ich dir später."

Edit: Habe was gefunden: Schreib mal folgendes:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
   Type TMyArray; forward;
   Type TMyClass=class(TObject)
     x : TMyArray;
   end;     
   Type TMyArray = array of TMyClass


...oder sowas. Verdammt! Ich bin durch ada voll aus der Delphi Syndax :motz:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.


Zuletzt bearbeitet von JayEff am Do 08.05.08 12:35, insgesamt 1-mal bearbeitet
mkinzler
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 4106
Erhaltene Danke: 13


Delphi 2010 Pro; Delphi.Prism 2011 pro
BeitragVerfasst: Do 08.05.08 12:32 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
    TCustomTreeObject=class;

    TCustomTreeObjectArray=array of TCustomTreeObject;

    TCustomTreeObject=class(TObject)
        private
               myParent:TCustomTreeObject;
        public
               function GetChilds:TCustomTreeObjectArray;
    end;

_________________
Markus Kinzler.
JayEff
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: Do 08.05.08 12:36 
Ok, so wirds klappen, schön copy&paste fähig, prima, muss man garnich mehr denken :motz:

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: Do 08.05.08 13:33 
Manchmal wären 1-2 Zeilen Erklärung gar nicht mal so schlecht. Dann hätte man velleicht sogar die Möglichkeit es zu verstehen und beim nächsten Mal nicht wieder fragen zu müssen....

Wie JayEff aber schon sagte schimpft sich das Forwarddeklarationen und die sagen Delphi lediglich da gibt es eine Klasse und die hat folgenden Namen. ABER so wie JayEff das geschrieben hat geht es leider nicht. Die Forwarddeklarationen sind nur innerhalb EINES Typeblockes gültig. Das heißt diese Typen die du deklarierst dürfen nicht alle ein neues type haben sondern müssen alle unterhalb eines Types befinden.
ausblenden geht
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
type
  TClass1 = class;

  TClass2 = class
    C: TClass1;
  end;

  TClass1 = class
    C: TClass2;
  end;


ausblenden geht nicht
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
type
  TClass1 = class;

type
  TClass2 = class
    C: TClass1;
  end;

type
  TClass1 = class
    C: TClass2;
  end;

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
K_wave Threadstarter
Hält's aus hier
Beiträge: 11



BeitragVerfasst: Do 08.05.08 13:39 
Vielen Dank für die zahlreichen Antworten! so funtktioniert es ;-)