E2147 La propriété '%s' n'existe pas dans la classe de base (Delphi)

De RAD Studio
Aller à : navigation, rechercher

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

Le compilateur croit que vous essayez de remonter une propriété vers un niveau de visibilité différent dans une classe dérivée, mais la propriété spécifiée n'existe pas dans la classe de base.



program Produce;

  type
    Base = class
    private
      a: Integer;
      property BaseProp : integer read a write a;
    end;

    Derived = class (Base)
      ch : Char;
      property Alpha read ch write ch; (*cas 1*)
      property BesaProp; (*cas 2*)
    end;

begin
end.

Deux causes de base sont à l'origine de cette erreur. La première est la spécification d'une nouvelle propriété sans avoir spécifié de type, ceci n'est habituellement pas supposé être un mouvement vers un nouveau niveau de visibilité. La seconde est la spécification d'une propriété qui existe dans la classe de base mais qui n'est pas trouvée par le compilateur ; la cause la plus probable est une simple erreur typographique (comme dans "BesaProp"). Dans le deuxième cas, le compilateur émettra aussi des erreurs pour indiquer qu'une clause read ou write était attendue.



program Solve;

  type
    Base = class
    private
      a: Integer;
      property BaseProp : integer read a write a;
    end;

    Derived = class (Base)
      ch : Char;
    public
      property Alpha : Char read ch write ch; (*cas 1*)
      property BaseProp; (*cas 2*)
    end;

begin
end.

La solution du premier cas est de fournir le type de la propriété. La solution du deuxième cas est de vérifier l'orthographe du nom de la propriété.