E2094 ローカル手続き/関数 '%s' を手続き変数に代入しました (Delphi)

提供: RAD Studio
移動先: 案内検索

エラーと警告のメッセージ(Delphi) への移動

このエラーメッセージはローカル手続きを手続き変数に代入しようとした場合か,ローカル手続きを手続きのパラメータとして渡そうとした場合に表示されます。

そのような操作は,外側の手続きがアクティブでなくてもローカル手続きを呼び出せることになるので違法です。ローカル手続きが外側の手続きの変数にアクセスしようとするとプログラムがクラッシュします。


program Produce;

var
  P: Procedure;

procedure Outer;

  procedure Local;
  begin
    Writeln('Local is executing');
  end;

begin
  P := Local;       (*<-- ここでエラーメッセージ*)
end;

begin
  Outer;
  P;
end.

{ このコードはローカル手続きを手続き型変数へ代入しようとする。これは実行時に安全でないので違法である }


program Solve;

var
  P: Procedure;

procedure NonLocal;
begin
  Writeln('NonLocal is executing');
end;

procedure Outer;

begin
  P := NonLocal;
end;

begin
  Outer;
  P;
end.

{ ローカル手続きを外側の手続きから外へ出せば解決する }