我的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测试项目编译此代码?
答案 0 :(得分: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;
答案 1 :(得分:0)
在Graymatter的帮助下,我找到了设置开关的地方。
点击下方的复选框:
Project options | Delphi compiler | Compiling | Syntax | Assignable types constants
更新:正如graymatter指出的那样,编译器切换(如果使用的话)需要是声明符号的位置,而不是访问它。