2009-10-29 9 views
6

Sto provando a ridimensionare una matrice di una determinata classe passata come argomento, ad es.Delphi: SetLength() sull'argomento di tipo "array di TObject"

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

Tuttavia, questo genera un errore "E2008 tipi incompatibili". È vero che non puoi farlo (ho visto delle voci, ma nessuna documentazione ufficiale) o sto facendo qualcosa di sbagliato?

risposta

10

Non è stato definito esplicitamente il tipo. Quindi il compilatore ha problemi ad abbinarli. Se si definisce il tipo come:

type 
    TObjectArray = array of TObject; 

v'è alcun dubbio su di esso e (grazie a Mghie) si dovrebbe utilizzare un parametro var perché resising probabilmente causerà un cambiamento del puntatore.

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

Dovrebbe essere un parametro var? – mghie

+0

Buon punto. Corretto –

+0

Questa risposta manca il punto chiave che è la differenza tra gli array aperti e gli array dianmici. –

9

si stia mescolando antenne aperte (il parametro di ridimensionamento) e array dinamici (quello che si aspetta SetLength). Vedere here per una spiegazione, in particolare la parte intitolata "Confusione".

+0

Grazie Gerhardt. Sto ancora imparando questa roba. :) – conciliator

Problemi correlati