初始化记录数组时常量表达式预期错误

Constant Expression Expected Error when Initializing Array of Records

提问人:Issam 提问时间:11/11/2023 最后编辑:Ken WhiteIssam 更新时间:11/12/2023 访问量:127

问:

我在尝试在Delphi中初始化一个常量记录数组时遇到了一个问题。这是我的代码的简化版本:

  TParameterList = record
    Parm_Name: string;
    Parm_Unit: string;
    IsRequired: Boolean;
    Default_Value: String;
    ParmV: Integer;
    Value_Options: TArray<String>;
  end;

const
 IP_Options: TArray<String> =['Option 1','Option 2','Option 3'];

const
  Cables_Parms: array[0..4] of TParameterList = (
    (Parm_Name: 'Insulation'; Parm_Unit: 'N/A'; IsRequired: True; Value_Options: IP_Options),
    // Other entries...
  );

但是,我遇到了错误

预期的常量表达式

特别是在我尝试用 .我将不胜感激任何关于可能导致此问题的原因以及我如何解决它的任何见解。Value_OptionsIP_Options

数组 Delphi 常量 记录

评论

3赞 Andreas Rejbrand 11/11/2023
动态数组“常量”不能在常量表达式中使用。
0赞 Issam 11/11/2023
而且常量数组不能在记录中定义。所以我认为这个问题在视线中没有解决方案.
0赞 Andreas Rejbrand 11/11/2023
鉴于你可以做type TTest = record a: Integer; b: TArray<Integer>; end;const T: TTest = (a: 1; b: [1, 2, 3]);
0赞 Andreas Rejbrand 11/11/2023
就您而言:(Parm_Name: 'Insulation'; Parm_Unit: 'N/A'; IsRequired: True; Value_Options: ['Option 1','Option 2','Option 3'])
0赞 Issam 11/11/2023
是的,它@AndreasRejbrand工作,谢谢

答:

2赞 Andreas Rejbrand 11/12/2023 #1

动态数组常量不能在常量表达式中使用:

type
  TTest = record
    a: Integer;
    b: TArray<Integer>;
  end;

const
  Arr: TArray<Integer> = [1, 2, 3];

  Test: TTest = (a: 394; b: Arr);       // [dcc32 Error] E2026 Constant expression expected

但是,您可以在此类上下文中使用动态数组文本:

type
  TTest = record
    a: Integer;
    b: TArray<Integer>;
  end;

const
  Test: TTest = (a: 394; b: [1, 2, 3]); // compiles

显然,这并不完全是你想要的,但它可能已经足够好了。