E2021 Klassentyp erwartet (Delphi)
Nach oben zu Fehler- und Warnungsmeldungen (Delphi)
In bestimmten Situationen erwartet der Compiler einen Klassentyp:
- Als Vorfahre eines Klassentyps.
- In der on-Klausel einer try-except-Anweisung.
- Als erstes Argument einer raise-Anweisung.
- Als letzten Typ eines forward-deklarierten Klassentyps.
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.