E2064 Der linken Seite kann nichts zugewiesen werden (Object Pascal)

Aus Appmethod Topics
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Object Pascal) - Index

Dieser Fehler tritt auf, wenn ein schreibgeschütztes Objekt, wie z.B. eine Konstante, ein Konstantenparameter oder der Rückgabewert einer Funktion, schreibgeschützte Eigenschaften oder Felder von schreibgeschützten Eigenschaften, geändert wird.

Diese Probleme können auf zwei Arten gelöst werden:

  • Durch Ändern der Definition dessen, zu dem zugewiesen wird, damit die Zuweisung gültig wird.
  • Durch Entfernen der gesamten Zuweisung.


Beispiele

program Produce;

const c = 1;

procedure p(const s: string); begin s := 'changed';            (*<-- Hier die Fehlermeldung*) end;

function f: PChar; begin f := 'Hello';              (*Das ist OK - nun wird der Rückgabewert gesetzt*) end;

begin c := 2;                    (*<-- Hier die Fehlermeldung*) f := 'h';                  (*<-- Hier die Fehlermeldung*) end.

In obigen Beispiel erfolgt eine Zuweisung an einen Konstantenparameter, an eine Konstante und an einen Rückgabewert einer Funktion. Keine dieser Operationen ist zulässig. Das folgende Beispiel zeigt, wie diese Probleme behoben werden.


program Solve;

var c : Integer = 1;           (*Verwenden Sie eine initialisierte Variable*)

procedure p(const s: string); begin s := 'changed';            (*Verwenden Sie einen variablen Parameter*) end;

function f: PChar; begin f := 'Hello';              (*Das ist OK - nun wird der Rückgabewert gesetzt*) end;

begin c := 2; f^ := 'h';                 (*Das Programm wird zwar compiliert, stürzt aber zur Laufzeit ab*) end.

In Object Pascal 2010 und höher wird der Fehler E2064 auch vom Compiler ausgegeben, wenn Sie versuchen, einen Wert an einen Member eines Records zuzuweisen, der von einer schreibgeschützten Eigenschaft bereitgestellt wird. Betrachten Sie den folgenden Record-Typ:

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

Dieser Record wird von einer schreibgeschützten Eigenschaft in der folgenden Klasse bereitgestellt:

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

Die Zuweisung eines Wertes an die Eigenschaft CurrentCustomer oder an einen Member des von der Eigenschaft CurrentCustomer bereitgestellten Records führt zur Ausgabe des Fehlers E2064 durch den Compiler.