我想重新調整作爲參數傳遞的某個類的數組,例如德爾福:SetLength()參數的類型「數組的TObject」
procedure Resize(MyArray: Array of TObject);
begin
SetLength(MyArray, 100);
end;
但是,這會產生一個錯誤「E2008 Incompatible types」。這是真的,你不能這樣做(我見過謠言,但沒有官方文檔)或者我做錯了什麼?
我想重新調整作爲參數傳遞的某個類的數組,例如德爾福:SetLength()參數的類型「數組的TObject」
procedure Resize(MyArray: Array of TObject);
begin
SetLength(MyArray, 100);
end;
但是,這會產生一個錯誤「E2008 Incompatible types」。這是真的,你不能這樣做(我見過謠言,但沒有官方文檔)或者我做錯了什麼?
您沒有明確定義類型。所以編譯器有匹配它們的問題。如果定義喜歡的類型:
type
TObjectArray = array of TObject;
有一點毫無疑問,你應該使用一個變量參數,因爲resising可能(感謝Mghie)引起指針的變化。
procedure Resize(var MyArray: TObjectArray);
begin
SetLength(MyArray, 100);
end;
你混合開放數組(調整尺寸的參數)和動態數組(什麼SetLength預期)。請參閱here以獲得解釋 - 特別是標題爲「混亂」的部分。
謝謝格哈德。我仍然在學習這些東西。 :) – conciliator 2009-11-03 08:42:41
應該是一個var參數? – mghie 2009-10-29 08:53:34
好點。更正它。 – 2009-10-29 08:57:25
這個答案忽略了開放數組和dyanmic數組之間差異的關鍵點。 – 2014-01-15 10:19:55