创建字符串数组 - Const Expression Expected错误

时间:2013-04-29 18:30:33

标签: arrays delphi

我在var部分为此Delphi程序声明了两件事:

  LCloneTask1, LCloneTask2, LCloneTask3, ... , LCloneTask20 : String;
  CloneTaskArray : array[0..19] of String = (LCloneTask1, LCloneTask2, LCloneTask3,.., LCloneTask20);

第一行声明一些字符串,第二行声明所述字符串数组。这个数组的大小总是20个。

当我尝试编译时,我得到一个错误,“预期的常量表达式”。我没有正确声明字符串数组吗?我需要能够在程序中稍后读取和写入此数组。

1 个答案:

答案 0 :(得分:3)

您正尝试将变量初始化为其声明的一部分。 documentation表示语法必须是:

var identifier: type = constantExpression;
     

其中constantExpression是表示a的任何常量表达式   类型的值。

documentation for constant expressions说(强调我的):

  

常量表达式是编译器可以在不执行其发生的程序的情况下进行求值的表达式。常量表达式包括数字;字符串;真常数;枚举类型的值;特殊常量True,False和nil;和表达式专门使用运算符,类型转换和集合构造函数构建的表达式。常量表达式不能包含变量,指针或函数调用。

你违反了最后一句,特别是我强调的部分。


很有可能你想要做的就是声明一个字符串数组。在这种情况下,您只需写:

var
  CloneTaskArray: array[0..19] of string;

如果您需要初始化此数组,请在声明它们的单元的initialization部分中执行此操作:

initialization
  CloneTaskArray[0] := 'boo';
  CloneTaskArray[1] := 'yah';
  ....

我注意到您正在尝试使用其他字符串变量初始化数组的元素。有一个更简单的例子,我想知道你是否想要这样做:

var
  s1, s2: string;
  StringArray: array[0..1] of string;
....
StringArray[0] := s1; 
StringArray[1] := s2; 

然后我想知道你是否希望你能做到这一点:

s1 := 'boo';
Assert(StringArray[0] = 'boo');

如果那是你所希望的,你会失望的。 Delphi中的字符串数据类型非常复杂,但从根本上说它的行为类似于值类型。如果您尝试执行上面概述的操作,则需要使用对字符串变量的引用:

type
  PString = ^string;
var
  s1, s2: string;
  StringArray: array[0..1] of PString;
....
StringArray[0] := @s1; 
StringArray[1] := @s2; 

然后你确实可以写:

s1 := 'boo';
Assert(StringArray[0]^ = 'boo');