E2021 Type Class requis (Delphi)
Remonter à Messages d'erreur et d'avertissement (Delphi)
Dans certaines situations, le compilateur requiert un type class :
- En tant qu'ancêtre d'un type de classe.
- Dans la clause on d'une instruction try-except.
- En tant que premier argument d'une instruction raise.
- Comme type final d'un type class forward déclaré.
Type de classe requis dans une déclaration de classe
Ce message d'erreur s'affiche si vous tentez de déclarer une classe sans classe parent qui implémente une ou plusieurs interfaces. Par exemple :
TMyClass = class(IMyInterface1, IMyInterface2);
Dans Delphi, chaque classe hérite d'une classe parent ou, si vous n'indiquez pas de classe parent lorsque vous déclarez la classe, le compilateur suppose que votre classe hérite de TObject. Autrement dit, les deux lignes de code suivantes sont équivalentes :
TMyClass = class;
TMyClass = class(TObject);
Pour corriger votre code, vous devez indiquer une classe parent avant les interfaces implémentées par votre classe :
TMyClass = class(TObject, IMyInterface1, IMyInterface2);
Cependant, si votre classe hérite directement de TObject
, vous devez implémenter l'API de IInterface, qui est la racine de toutes les interfaces. La classe TInterfacedObject s'avère pratique car elle implémente cette API pour vous :
TMyClass = class(TInterfacedObject, IMyInterface1, IMyInterface2);
Type de classe requis dans une instruction raise
Ce message d'erreur s'affiche si vous tentez de déclencher un littéral chaîne. Par exemple :
program Produce;
begin
raise 'This would work in C++, but does not in Delphi';
end.
Vous devez plutôt créer un objet exception :
program Solve;
uses SysUtils;
begin
raise Exception.Create('There is a simple workaround, however');
end.
Pour plus d'informations, voir Déclenchement d'une exception.