E2021 Klassentyp erwartet (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)


In bestimmten Situationen erwartet der Compiler einen Klassentyp:

Klassentyp für Klassendeklaration erforderlich

Dieser Fehler tritt auf, wenn Sie versuchen, ein Klasse ohne übergeordnete Klasse zu deklarieren, die ein oder mehrere Interfaces implementiert. Zum Beispiel:

TMyClass = class(IMyInterface1, IMyInterface2);

In Delphi stammt jede Klasse von einer übergeordneten Klasse ab. Wenn Sie beim Deklarieren Ihrer Klasse keine übergeordnete Klasse angeben, geht der Compiler davon aus, dass Ihre Klasse von TObject abstammt. Daher sind die folgenden beiden Codezeilen äquivalent:

TMyClass = class;
TMyClass = class(TObject);

Um Ihren Code zu korrigieren, müssen Sie eine übergeordnete Klasse vor den Interfaces angeben, die Ihre Klasse implementiert:

TMyClass = class(TObject, IMyInterface1, IMyInterface2);

Wenn Sie Ihre Klasse jedoch direkt von TObject ableiten, müssen Sie die API von IInterface, dem Stamm aller Interfaces, implementieren. Es gibt eine Klasse, TInterfacedObject, die diese API für Sie implementiert:

TMyClass = class(TInterfacedObject, IMyInterface1, IMyInterface2);

Klassentyp für raise-Anweisung erforderlich

Dieser Fehler tritt auf, wenn Sie versuchen, ein String-Literal auszulösen. Zum Beispiel:

program Produce;
begin

  raise 'This would work in C++, but does not in Delphi';

end.

Sie müssen stattdessen ein Exception-Objekt erstellen:

program Solve;
uses SysUtils;
begin
  raise Exception.Create('There is a simple workaround, however');
end.

Weitere Informationen finden Sie unter Exception auslösen.