您正在尝试初始化一个变量作为其声明的一部分。该文档指出语法必须是:
var identifier: type = constantExpression;
其中 constantExpression 是表示类型类型值的任何常量表达式。
常量表达式的文档说(强调我的):
常量表达式是编译器可以在不执行它所在的程序的情况下计算的表达式。常量表达式包括数字;字符串;真正的常数;枚举类型的值;特殊常量 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');