2009-11-22 4 views
3

Je voudrais passer un tableau multidimensionnel à un constructeur comme ceci:Passer un tableau multidimensionnel comme paramètre dans Delphi

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

Où LocalField est un tableau de tableau de nombre entier.

Cependant le code ci-dessus ne compilera pas ('Identifiant attendu mais ARRAY trouvé'). Est-ce que quelqu'un pourrait m'expliquer pourquoi c'est faux? J'ai essayé de lire sur des tableaux ouverts, statiques et dynamiques, mais je n'ai pas encore trouvé quelque chose qui fonctionne. Y at-il un moyen de le réparer sans changer le type de LocalField?

Répondre

12

Faire un type spécifique pour localfield, puis définissez que le type de myParameter, quelque chose le long des lignes de:

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

var 
    LocalField: TTheArray; 

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

(Remarque: non vérifié dans un compilateur, des erreurs mineures peuvent être présents)

Notez que

le plus souvent dans la syntaxe pascals-comme un tableau multidimensionnel est plus correctement déclarée comme

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

à moins, bien sûr, vous avez une bonne raison de le faire c'est l'inverse.

+9

+1. En cas de doute, * nommez vos types *. –

1

Je n'ai pas Delphi à la main, mais je pense que cela devrait fonctionner:

type 
    TIntArray = array of Integer; 

... 

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

Je préfère ce

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]); 
Questions connexes