Yur*_*riy 1 arrays delphi record
我有下一个数组
NAMES1: array[0..1] of string = ('NO1','NAME1');
NAMES2: array[0..1] of string = ('NO2','NAME2');
Run Code Online (Sandbox Code Playgroud)
和记录结构
TMyRec = record(
Name: ????;
);
Run Code Online (Sandbox Code Playgroud)
结果我需要声明一个常量的记录数组,如下所示
const
StringArraysList: array[0..1] of TMyRec = (
(Name: NAMES1),
(Name: NAMES2)
);
Run Code Online (Sandbox Code Playgroud)
问题是我应该在TMyRec中为Name选择什么类型?
Dav*_*nan 11
你需要这样做:
type
TTwoNames = array[0..1] of string;
TMyRec = record
Names: TTwoNames;
end;
const
StringArraysList: array[0..1] of TMyRec = (
(Names: ('NO1','NAME1')),
(Names: ('NO2','NAME2'))
);
Run Code Online (Sandbox Code Playgroud)
您更愿意将最终声明写为
const
NAMES1: TTwoNames = ('NO1','NAME1');
NAMES2: TTwoNames = ('NO2','NAME2');
StringArraysList: array[0..1] of TMyRec = (
(Names: NAMES1),
(Names: NAMES2)
);
Run Code Online (Sandbox Code Playgroud)
但结果是
[DCC错误] Unit1.pas(38):E2026预期的常量表达式
一些Delphi常量并不像你希望的那样恒定!
记录常量的文档说明了这一点
值必须由常量表达式表示.
类型常量的文档说明了这一点
类型常量不能出现在常量表达式中.
把这两个规则放在一起,我们有E2026.
您可以声明一个新类型
TName = array[0..1] of string;
Run Code Online (Sandbox Code Playgroud)
并在你的记录声明中使用它.你的声明就变成了
type
TName = array[0..1] of string;
TMyRec = record
Name: TName;
end;
const
StringArraysList: array[0..1] of TMyRec = (
(Name: ('NO1','NAME1')),
(Name: ('NO2','NAME2'))
);
Run Code Online (Sandbox Code Playgroud)