首页 文章

可以在Delphi XE4中禁用E2064吗?

提问于
浏览
2

我的DUnitX测试项目中的以下示例代码无法编译 . 此示例代码的范围与在非常大的VCL表单项目中无错误编译的代码相同 . 这两个项目都使用Delphi XE4,但是当我在我的DUnitX单元测试项目中引用在VCL项目中成功编译的源文件时,它失败并且相同的E2064 left side cannot be assigned to此代码产生:

program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

type
  TTestRec = record
    A: string;
  end;

const
  AConstArray : array [0..1] of TTestRec = ( (A: '1'), (A: '2') );

procedure E2064Test;
begin
  {$J+}
  {$WRITEABLECONST ON}
  AConstArray[0].A := '3'; // error here
  AConstArray[1].A := '4'; // error here
  {$WRITEABLECONST OFF}
  {$J-}
end;

begin
end.

是否有编译器开关或其他一些奇怪的路径/设置需要指定才能在XE4中为我的DUnitX测试项目编译此代码?

2 回答

  • 0

    你可以使用{$J+} . 这为我编译 .

    type
      TTestRec = record
        A: string;
      end;
    
    const
      {$J+}
      AConstArray : array [0..1] of TTestRec = ( (A: '1'), (A: '2') );
      {$J-}
    
    procedure E2064Test;
    begin
      AConstArray[0].A := '3'; // error here
      AConstArray[1].A := '4'; // error here
    end;
    
  • 2

    在Graymatter的帮助下,我找到了设置开关的地方 .

    点击下面的复选框:

    Project options | Delphi compiler | Compiling | Syntax | Assignable types constants
    

    更新:正如graymatter指出的那样,编译器切换(如果使用的话)需要是声明符号的位置,而不是访问 .

相关问题