E2064 La partie gauche n'est pas affectable (Object Pascal)

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Messages d'erreur et d'avertissement (Object Pascal) - Index

Ce message d'erreur est produit quand vous essayez de modifier un objet en lecture seule tel qu'une constante, un paramètre constante, la valeur renvoyée d'une fonction, les propriétés en lecture seule ou les champs des propriétés en lecture seule.

Il existe deux moyens de résoudre ce type de problème :

  • Modifier la définition des affectations que vous voulez faire, pour que l'affectation devienne correcte.
  • Eliminer entièrement l'affectation.


Exemples

program Produce;

const
  c = 1;

procedure p(const s: string);
begin
  s := 'changed';            (*<-- Error message here*)
end;

function f: PChar;
begin
  f := 'Hello';              (*This is fine - we are setting the return value*)
end;

begin
  c := 2;                    (*<-- Error message here*)
  f := 'h';                  (*<-- Error message here*)
end.

L'exemple précédent affecte une valeur à un paramètre constante, à une constante et au résultat d'un appel de fonction. Tout ceci est incorrect. L'exemple suivant illustre comment corriger ces problèmes.


program Solve;

var
  c : Integer = 1;           (*Use an initialized variable*)

procedure p(var s: string);
begin
  s := 'changed';            (*Use variable parameter*)
end;

function f: PChar;
begin
  f := 'Hello';              (*This is fine - we are setting the return value*)
end;

begin
  c := 2;
  f^ := 'h';                 (*This compiles, but will crash at run time*)
end.

Dans Object Pascal 2010 et les versions supérieures, E2064 est aussi émis par le compilateur à chaque fois que vous essayez d'affecter une valeur à un membre d'un enregistrement exposé par une propriété en lecture seule. Considérons le type d'enregistrement suivant :

TCustomer = record
  Age: Integer;
  Name: String;
end;

qui est exposé par une propriété en lecture seule dans une classe :

TExposing = class
...
  CurrentCustomer: TCustomer read SomeInternalField;
...
end;

L'affectation d'une valeur à la propriété CurrentCustomer ou à un membre de l'enregistrement exposé par la propriété CurrentCustomer provoque l'émission par le compilateur de cette erreur E2064.