记录在案(无法初始化)

WeG*_*ars 4 delphi

我有2条记录,如下所示:

TYPE
 TRecord2= packed record
  i2: Integer;
 end;

 TRecord1= packed record
  i1: Integer;
  R2: TRecord2;
 end;
Run Code Online (Sandbox Code Playgroud)

.

我想将记录字段初始化为零,但我不想使用FillMemory,因此我声明了2个常量记录,我在其中初始化字段.

CONST
  Record2c: TRecord2=
  (
   i2: 0;
  );

  Record1c: TRecord1=
  (
    i1: 0;
    R2: Record2c;      <------- error line
  );
Run Code Online (Sandbox Code Playgroud)

但是,我无法将Record2c分配给R2字段.编译器说:E2029'('期望但标识符'Record2c'找到.

但这有效(如果我评论我有错误的行):

procedure test;
var Record1: TRecord1;
begin
 Record1:= Record1c;      // initialize variable by associating the constant to it
end
Run Code Online (Sandbox Code Playgroud)

那么,我如何初始化R2字段?

Uli*_*rdt 5

那是因为Record2c是一个不是"真实"常数的类型常量.所以你不能用它来初始化另一个常量.你必须声明Record1c

  Record1c: TRecord1 =
    (
    i1: 0;
    R2: (i2: 0);
    );
Run Code Online (Sandbox Code Playgroud)


Rob*_*edy 5

您只能使用true常量初始化consts .真常量没有类型 - 那些是类型常量.请参阅Delphi文档中的声明常量.Record2c在你的代码中是一个类型化的常量,所以它不能用在初始化所需的const表达式中Record1c.你只需要在线定义Record1c.R2:

const
  Record1c: TRecord1 = (
    i1: 0;
    R2: (i2: 0;);
  );
Run Code Online (Sandbox Code Playgroud)

当您注释掉错误行时,您将R2默认初始化为零的字段.