您正試圖初始化一個變量作爲其聲明的一部分。的documentation指出語法必須:
var identifier: type = constantExpression;
其中常量表達式是表示類型類型的 值的任何常量表達式。
的documentation for constant expressions說(重點煤礦):
常量表達式是編譯器可以不執行在其發生的程序計算表達式。常量表達式包括數字;字符串;真常數;枚舉類型的值;特殊常量True,False和零;以及由這些元素完全由操作符,類型轉換和設置構造函數構建的表達式。常量表達式不能包含變量,指針或函數調用。
你違反了最後一句,特別是我強調的部分。
很可能你所要做的就是聲明一個字符串數組。在這種情況下,你會簡單的寫:
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');
你並不需要在第一線的所有。只是'CloneTaskArray:String [0..19];' – 2013-04-29 18:34:36
如果我不包含第一個列表,我會在數組變量名上得到一堆紅色的Undeclared Identifier警告...... – ikathegreat 2013-04-29 18:40:30
使用數組或者變量,而不是兩者。你在內存中爲同一目的的兩個不同的字符串定義了兩個不同的地方。而不是閱讀'LCloneTask1'而不是讀取'CloneTaskArray [0]'。或者,如David所述,使用指向這些字符串的指針。 – 2013-04-29 18:41:21