2

我的 DUnitX 测试项目中有以下示例代码无法编译。此示例代码的范围与在非常大的 VCL 表单项目中编译时不会出错的代码相同。这两个项目都使用Delphi XE4,但是当我在我的DUnitX单元测试项目中引用在VCL项目中成功编译的源文件时,它失败了,同样的E2064左侧不能分配给这个代码产生:

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 测试项目编译?

4

2 回答 2

2

您可以使用{$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;
于 2014-06-19T23:58:37.093 回答
0

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

点击下面的复选框:

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

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

于 2014-06-20T00:24:14.653 回答