E2082 TYPEOF は VMT を持つオブジェクト型に対してのみ使用することができます (Delphi)

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

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

このエラーメッセージは仮想メソッドテーブル(VMT)がないオブジェクト型へ標準関数 TypeOf を適用しようとした場合に表示されます。

単純な回避方法としては,ダミーの仮想メソッドを宣言して強制的にコンパイラに VMT を生成させます。


program Produce;

type
  TMyObject = object
    procedure MyProc;
  end;

procedure TMyObject.MyProc;
begin
  (*...*)
end;

var
  P: Pointer;
begin
  P := TypeOf(TMyObject);    (*<-- ここでエラーメッセージ*)
end.

{ このコードは仮想メソッドテーブル(VMT)を持たない TMyObject 型へ TypeOf 標準関数を適用しようとしている }


program Solve;

type
  TMyObject = object
    procedure MyProc;
    procedure Dummy; virtual;
  end;

procedure TMyObject.MyProc;
begin
  (*...*)
end;

procedure TMyObject.Dummy;
begin
end;

var
  P: Pointer;
begin
  P := TypeOf(TMyObject);
end.

{ ダミーの仮想メソッドを導入するか TypeOf の呼び出しを削除すれば解決する }