Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - in records forwarden
Allesquarks - Mi 01.11.06 17:48
Titel: in records forwarden
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| type TMathkeyword=class;
TParsefunctions=function(zeile:string;start:integer;var parseend:integer;selfkey:TMathkeyword):TFunction;
TMathkeyword = class priority:integer; tag:integer; notation:string; functionclass:TFunctionclass; parsefunction:TParsefunctions; end; |
wie man sieht musste ich um parsefunctions zu definieren TMathkeyword forwarden. Ich habe das aber nur über den Umweg hinbekommen, dass Mathkeyword ne Klasse ist. Dabei soll ees eigentlich ein record sein. In Delphi 7 war dazu eine schöne Hilfe bin aber inzwischen bei Turbo angelangt.
Edit: Oder geht das bei records gar nicht?
Reinhard Kern - Mi 01.11.06 18:04
Moderiert von
Narses: Komplett-Zitat des letzten Beitrags entfernt.
Hallo,
wenn du eine Klasse hast, ist der aktuelle Parameter immer ein Pointer, daher ist forward kein Problem. Bei einem record könntest du ja auch mit einem Pointer arbeiten und als Parameter einen allgemeinen Pointer definieren (dann brauchst du keine vorherige Deklaration, erst in der Implementierung), aber schön ist das auch nicht, weil die Typprüfung teilweise entfällt.
Gruss Reinhard
NACHTRAG:
wg. pointer geht es auch folgendermassen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| PMathkeyword = ^TMathkeyword;
TParsefunctions=function(zeile:string;start:integer; var parseend:integer;selfkey:PMathkeyword):TFunction;
TMathkeyword = record priority:integer; tag:integer; notation:string; functionclass:TFunctionclass; parsefunction:TParsefunctions; end; |
Xion - So 06.03.11 16:32
Das Topic ist zwar schon etwas abgestaubt, ich hab aber exakt das selbe Problem.
Allerdings funktioniert das mit dem Pointer bei mir nicht, da er bei der Deklaration von PMathkeyword logischerweise TMathkeyword auch noch nicht kennt.
Mein konkreter Fall:
Delphi-Quelltext
1: 2: 3: 4: 5:
| type TObservationFunction = procedure (var Ball: TGameBall; [...] ); type TGameBall=record [...] ObservationFunction: TObservationFunction; end; |
Wenn es so nicht geht wäre das extrem doof...da ich die Records durch die Gegend jongliere, wenn ich da die Funktion nicht dranpacken kann, ist das ziemlich doof.
Edit:
So gehts:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| type PGameBall = ^TGameBall;
TObservationFunction=procedure (var Ball: PGameBall; [...]) of object;
TGameBall=record [...] ObservationFunction: TObservationFunction; end; |
Ob ich mit dem Pointer zufrieden bin...mal sehen ;)
jaenicke - So 06.03.11 16:58
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| type TGameBall = class private type TObservationFunction = procedure(var Ball: TGameBall; [...]) of object; private FObservationFunction: TObservationFunction; end; |
Funktioniert aber erst ab Turbo Delphi / Delphi 2006. Eine Klasse ist meistens ja eh sinnvoller als ein Record.
Xion - So 06.03.11 17:07
Geht auch in Delphi 2005 schon, dankö. Klasse ist zwar nicht so schön für mich...aber besser als der Pointer :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!