Jilani Khaldi wrote: >> Did you implement the record exactly as shown? This error normally >> occurs >> if you have fields in your record that you don't mention in your typed >> const declaration. > > {$mode objfpc} -> Error! > {$mode delphi} -> Ok! > ... > type > TSetupFuncMapping = record > x: array of double; > name:string; > func: SetupFunc; > end; > > const > SFM: array[0..2] of TSetupFuncMapping = ( > (x: nil; name: 'SetupFunction_1'; func: SetupFunction_1), > (x: nil; name: 'SetupFunction_2'; func: SetupFunction_2), > (x: nil; name: 'SetupFunction_3'; func: SetupFunction_3));
I only get a RTE when compiling and running the following with 2.0.4, not a compile time error. Tomas {$MODE OBJFPC} uses SysUtils; type SetupFun = function(const vect: array of double): double; MyRec = record x: array of double; myFunName: ShortString; // function name to evoke end; type TSetupFuncMapping = record x: array of double; name:string; func: SetupFun; end; function SetupFunction_1 (const vect: array of double): double; begin SetupFunction_1 := 1; end; function SetupFunction_2 (const vect: array of double): double; begin SetupFunction_2 := 2; end; function SetupFunction_3 (const vect: array of double): double; begin SetupFunction_3 := 3; end; function SetMeUp(const x1: array of double): double; var i: integer; sum: double; begin sum := 0.0; for i := 0 to High(x1) do sum := sum + x1[i]; result := sum; end; const SFM: array[0..3] of TSetupFuncMapping = ( (x: nil; name: 'SetupFunction_1'; func: @SetupFunction_1), (x: nil; name: 'SetupFunction_2'; func: @SetupFunction_2), (x: nil; name: 'SetMeUp'; func: @SetMeUp), (x: nil; name: 'SetupFunction_3'; func: @SetupFunction_3)); // main var MR: MyRec; y: double; st: string; f: text; i, j, count: integer; begin // read MR from a text file... assign(f, 'data.txt'); {$I-} reset(f); {$I+} readln(f, MR.myFunName); readln(f, count); setlength(MR.x,count+1); for i := 0 to count do readln(f, MR.x[i]); closefile(f); writeln(MR.myFunName); writeln(High(MR.x)); for i := 0 to High(MR.x) do begin writeln(MR.x[i]); for J := 0 to 3 do if SFM [J].Name = MR.MyFunName [J] then y := SFM [J].Func (MR.X); st := Format('Value: %6.5f', [y]); writeln(st); setlength(MR.x,0); end; readln; end. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-pascal