Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Delphi "E2064 Left side cannot be assigned to" error appeared when upgrading a project from 2009 to XE

I read this question in which the same problem is discussed, anyway i was able to do this in Delphi 2009 and this was not possible as i upgraded to XE.

I paste here a simple dummy example: this compiles on 2009 and gives E2064 on XE... Why? Is it possible to setup XE to behave like 2009? Or should I go for a workaround?

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TTestRecord = record
    FirstItem  : Integer;
    SecondItem  : Integer;
  end;
  TForm2 = class(TForm)
    procedure AssignValues;
  private
    FTestRecord :TTestRecord;
  public
    property TestRecord : TTestRecord read FTestRecord write FTestRecord;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.AssignValues;
begin
with TestRecord do
     begin
       FirstItem := 14; // this gives error in XE but not in 2009
       SecondItem := 15;
     end;
end;

end.
like image 218
LaBracca Avatar asked Dec 22 '22 16:12

LaBracca


1 Answers

The D2010 compiler is just more strict than the previous versions were. In the previous versions the compiler didn't complain, but often the results would not be as you would expect as it was acting on a temporary var so your changes would be gone by the end of the method.

The answers on the question to which you linked provide the explanations even better and provide the solutions (or work-arounds) from which to choose.

like image 67
Marjan Venema Avatar answered Dec 28 '22 07:12

Marjan Venema