我有下一个数组
NAMES1: array[0..1] of string = ('NO1','NAME1');
NAMES2: array[0..1] of string = ('NO2','NAME2');
和记录结构
TMyRec = record(
Name: ????;
);
结果我需要声明一个常量的记录数组,如下面的
const
StringArraysList: array[0..1] of TMyRec = (
(Name: NAMES1),
(Name: NAMES2)
);
问题是我应该在TMyRec中为Name选择什么类型?
答案 0 :(得分: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'))
);
您希望将最终声明写为
const
NAMES1: TTwoNames = ('NO1','NAME1');
NAMES2: TTwoNames = ('NO2','NAME2');
StringArraysList: array[0..1] of TMyRec = (
(Names: NAMES1),
(Names: NAMES2)
);
但结果是
[DCC错误] Unit1.pas(38):E2026期望的常量表达式
有些Delphi常量并不像你希望的那样恒定!
record constants的文档说明了
值必须用常量表达式表示。
typed constants的文档说明了
类型常量不能出现在常量表达式中。
将这两条规则放在一起,我们有E2026
。
答案 1 :(得分:5)
您可以声明一个新类型
TName = array[0..1] of string;
并在您的记录声明中使用它。 您的声明随后变为
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'))
);