2009-11-22 86 views
3

我想多維數組傳遞給構造函數,像這樣:傳遞一個多維數組作爲參數在Delphi

constructor TMyClass.Create(MyParameter: array of array of Integer); 
begin 
    LocalField := MyParameter; 
end; 

哪裏LocalField是整數數組的數組。

但是,上面的代碼不會編譯('標識符預期,但ARRAY發現')。有人可以向我解釋爲什麼這是錯的嗎?我嘗試閱讀開放,靜態和動態數組,但尚未找到有效的東西。有沒有辦法解決它而不改變LocalField的類型?

回答

12

做一個特定類型localfield,然後設置爲MyParameter的線沿線的類型,東西:

type 
    TTheArray = array[1..5] of array[1..10] of Integer; 

var 
    LocalField: TTheArray; 

constructor TMyClass.Create(MyParameter: TTheArray); 
... 

(注:在編譯器中未驗證,小錯誤可能存在)

注意,最常見於帕斯卡的語法多維數組更爲恰當除非,當然,你有一些很好的理由這樣做聲明

type 
    TTheArray = array[1..5, 1..10] of Integer; 

它是另一種方式。

+9

+1。如有疑問,*請命名您的類型*。 – 2009-11-22 23:55:01

1

我沒有德爾福在手,但我認爲這應該工作:

type 
    TIntArray = array of Integer; 

... 

constructor TMyClass.Create (MyParameter : array of TIntArray); 
begin 
... 
end; 
0

我喜歡這個

procedure MakeMat(var c: TMatrix; nr, nc: integer; a: array of double); 
var 
    i, j: integer; 
begin 
    SetLength(c, nr, nc); 
    for i := 0 to nr-1 do 
    for j := 0 to nc-1 do 
     c[i,j] := a[i*nc + j]; 
end; 


MakeMat(ya, 5, 11, 
     [1.53,1.38,1.29,1.18,1.06,1.00,1.00,1.06,1.12,1.16,1.18, 
     0.57,0.52,0.48,0.44,0.40,0.39,0.39,0.40,0.42,0.43,0.44, 
     0.27,0.25,0.23,0.21,0.19,0.18,0.18,0.19,0.20,0.21,0.21, 
     0.22,0.20,0.19,0.17,0.15,0.14,0.14,0.15,0.16,0.17,0.17, 
     0.20,0.18,0.16,0.15,0.14,0.13,0.13,0.14,0.14,0.15,0.15]);