将项目从2009升级到XE时出现Delphi“E2064左侧无法分配”错误

时间:2011-03-30 08:57:27

标签: delphi compiler-errors delphi-2009 delphi-xe

我读了this question in which the same problem is discussed,无论如何我能够在Delphi 2009中做到这一点,但是当我升级到XE时这是不可能的。

我在这里粘贴一个简单的虚拟示例:这在2009年编译并在XE上提供E2064 ...为什么?是否有可能将XE设置为像2009年一样?或者我应该找一个解决方法?

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.

2 个答案:

答案 0 :(得分:12)

D2010编译器比以前的版本更严格。在以前的版本中,编译器没有抱怨,但通常结果不会像您期望的那样,因为它在临时变量上运行,因此您的更改将在方法结束时消失。

您链接的问题的答案提供了更好的解释,并提供了可供选择的解决方案(或解决方法)。

答案 1 :(得分:-1)

好的,好的,对不起,我不应该制作非技术内容......

现在,我们可以按如下方式修改代码,它可以正常工作:

type
  PTestRecord = ^TTestRecord;
  TTestRecord = record
    FirstItem: Integer;
    SecondItem: Integer;
  end;

  TForm2 = class(TForm)
  private
    { Private declarations }
    FTestRecord: TTestRecord;
    procedure AssignValues;
  public
    { Public declarations }
    property TestRecord: TTestRecord read FTestRecord write FTestRecord;
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.AssignValues;
begin
  with PTestRecord(@TestRecord)^ do
  begin
    FirstItem := 14; // it works fine.
    SecondItem := 15;
  end;
end;