関数ポインタがうまく渡せないです。

解決


おおさわ  URL  2005-02-24 20:31:44  No: 13419

こんにちは。この度は、質問があって参りました。
関数ポインタがうまく渡せないのです。

type
  TFunction = function(x: Real): Real;
  pTFunctinon = ^TFunction;

function Foo(Func: pTFunction; x: Real): Real;
begin
  Result:= Func^(x); 
end;

procedure Button1Click(Sender: TObject);
  function Half(x: Real): Real;
  begin
    Result:= x/2;
  end;
begin
  ShowMessage( FloatToStr( Foo( @Half , 1 ) ) );
end;

Button1 を押すと、Half の x = 1 に対する値が表示される意図のプログラムを書いたのですが、
「アドレス xxxxxxxx でアドレス xxxxxxxx に対する読み込み違反が起きました。」
という例外が発生してしまいます。

どなたか、ご教授よろしくお願いいたします。


りおりお  2005-02-24 20:38:20  No: 13420

こんな感じでは?

type
  TFunction = function(x: Real): Real;

function Foo(Func: TFunction; x: Real): Real;
begin
  Result:= Func(x);
end;

procedure TForm1.Button1Click(Sender: TObject);
  function Half(x: Real): Real;
  begin
    Result:= x/2;
  end;
begin
  ShowMessage( FloatToStr( Foo( @Half , 1 ) ) );
end;


おおさわ  2005-02-24 20:46:33  No: 13421

正常に表示されました!
なるほど、わざわざポインタ型として定義する必要はなかったんですね。
一つ、胸のむやむやが取れた気がします。

丁寧なご回答、ありがとうございました m(-_-)m


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加