こんにちは。この度は、質問があって参りました。
関数ポインタがうまく渡せないのです。
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 に対する読み込み違反が起きました。」
という例外が発生してしまいます。
どなたか、ご教授よろしくお願いいたします。
こんな感じでは?
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;
正常に表示されました!
なるほど、わざわざポインタ型として定義する必要はなかったんですね。
一つ、胸のむやむやが取れた気がします。
丁寧なご回答、ありがとうございました m(-_-)m
ツイート | ![]() |