2009-10-29 80 views
6

我想重新調整作爲參數傳遞的某個類的數組,例如德爾福:SetLength()參數的類型「數組的TObject」

procedure Resize(MyArray: Array of TObject); 
begin 
    SetLength(MyArray, 100); 
end; 

但是,這會產生一個錯誤「E2008 Incompatible types」。這是真的,你不能這樣做(我見過謠言,但沒有官方文檔)或者我做錯了什麼?

回答

10

您沒有明確定義類型。所以編譯器有匹配它們的問題。如果定義喜歡的類型:

type 
    TObjectArray = array of TObject; 

有一點毫無疑問,你應該使用一個變量參數,因爲resising可能(感謝Mghie)引起指針的變化。

procedure Resize(var MyArray: TObjectArray); 
begin 
    SetLength(MyArray, 100); 
end; 
+3

應該是一個var參數? – mghie 2009-10-29 08:53:34

+0

好點。更正它。 – 2009-10-29 08:57:25

+0

這個答案忽略了開放數組和dyanmic數組之間差異的關鍵點。 – 2014-01-15 10:19:55

9

你混合開放數組(調整尺寸的參數)和動態數組(什麼SetLength預期)。請參閱here以獲得解釋 - 特別是標題爲「混亂」的部分。

+0

謝謝格哈德。我仍然在學習這些東西。 :) – conciliator 2009-11-03 08:42:41