E2082 TYPEOF kann nur auf Objekttypen mit VMT angewendet werden (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)

Diese Fehlermeldung wird angezeigt, wenn Sie die Standardfunktion TypeOf auf einen Objekttyp anwenden, der über keine virtuelle Methodentabelle verfügt.

Eine einfache Abhilfe besteht darin, eine virtuelle Dummy-Prozedur zu deklarieren, damit der Compiler eine VMT erzeugt.


program Produce;

type
  TMyObject = object
    procedure MyProc;
  end;

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

var
  P: Pointer;
begin
  P := TypeOf(TMyObject);    (*<-- Hier die Fehlermeldung*)
end.

In diesem Beispiel wird die Standardfunktion TypeOf auf den Typ TMyObject angewendet, der keine virtuellen Funktionen und somit keine VMT hat.


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.

Deklarieren Sie eine virtuelle Dummy-Funktion, oder entfernen Sie den Aufruf von TypeOf.