E2082 TYPEOF ne peut être appliqué qu'à des types d'objet avec VMT (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Messages d'erreur et d'avertissement (Delphi)

Ce message d'erreur est émis si vous essayez d'appliquer la fonction standard TypeOf à un type object n'ayant pas de table de méthode virtuelle.

Une alternative simple consiste à déclarer une méthode virtuelle factice pour forcer le compilateur à générer une TMV.



program Produce;

type
  TMyObject = object
    procedure MyProc;
  end;

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

var
  P : Pointer;
begin
  P := TypeOf(TMyObject);    (*<-- Message d'erreur ici*)
end.

L'exemple essaie d'appliquer la fonction TypeOf standard au type TMyObject qui n'a pas de fonction virtuelle, et par conséquent pas de table de fonctions virtuelles (TMV).



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.

La solution consiste à introduire une fonction virtuelle factice ou à éliminer l'appel à TypeOf.