E2021 Type Class requis (Delphi)

De RAD Studio
Aller à : navigation, rechercher

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


Dans certaines situations, le compilateur requiert un type class :

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.