E2082 TYPEOF は VMT を持つオブジェクト型に対してのみ使用することができます (Delphi)
エラーと警告のメッセージ(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 の呼び出しを削除すれば解決する }