Autor Beitrag
Allesquarks
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 510

Win XP Prof
Delphi 7 E
BeitragVerfasst: Mi 01.11.06 17:48 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 591
Erhaltene Danke: 14



BeitragVerfasst: Mi 01.11.06 18:04 
Moderiert von user profile iconNarses: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: 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:

ausblenden 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:
ausblenden 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 ;)

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19314
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 06.03.11 16:58 
ausblenden 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.

Für diesen Beitrag haben gedankt: Xion
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: 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

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)