Delphi错误:E2010不兼容的类型'TRealFunction'和'Procedure'

时间:2018-07-11 08:25:58

标签: delphi

我正在设计一个带有(TFunctionWithDerivatives)的类 计算输入数值导数的方法 函数f:x \ in R-> R。

我要考虑功能评估的次数(nfeval) 在包装上使用包装器在衍生物的构建中使用 输入功能。但是编译器不喜欢我的实现, 显示此错误E2010不兼容的类型'TRealFunction'和'Procedure'。

这是一个简化的代码,其中TFunctionWithDerivatives的实例 是在Tform1.Create中创建的。

unit Unit2;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, 
  System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type TRealFunction = function(const x : Single) : Single;

type TFunctionWithDerivatives = class

   objfun : TRealFunction;
   nfeval : Integer;

   constructor Create(const _objfun : TRealFunction);
   function NumFirstlDer(const x : Single) : Single;

   private
   objFunWrapper : TRealFunction;

end;

type
  TForm1 = class(TForm)
    procedure Create(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function F1(const x : Single) : Single;
begin
  RESULT := sqr(x);
end;

procedure TForm1.Create(Sender: TObject);
var FWD    : TFunctionWithDerivatives;
begin
   FWD := TFunctionWithDerivatives.create(F1);
end;


// begin methods of TFunctionWithDerivatives
     constructor TFunctionWithDerivatives.Create(const _objfun : TRealFunction);
     begin
        inherited create;
        nfeval := 0;
        objFun := _objfun;
        objFunWrapper := function(const x : Single) : Single
                         begin
                           RESULT := objFun(x);
                           Inc(nfeval);
                         end;
     end;

     function TFunctionWithDerivatives.NumFirstlDer(const x : Single) : Single;
     var h : Single;
     begin
       h:=1e-3;
       // RESULT := (objfun(x+h, Param) - objfun(x, Param)) / h ;
       RESULT := ( objFunWrapper(x+h) - objFunWrapper(x) ) / h;
     end;
// end methods of TFunctionWithDerivatives

end.

您知道如何在我的类中定义objFunWrapper吗? 谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

您正在声明匿名方法。要声明匹配的类型,必须使用reference to语法:

type 
  TRealFunction = reference to function(const x: Single): Single;

文档:Anonymous Methods in Delphi