2009-10-29 19 views
6

Próbuję zmienić rozmiar tablicy określonej klasy przekazanej jako argument, np.Delphi: SetLength() dla argumentu typu "array of TObject"

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

Powoduje to jednak błąd "Typy niezgodne z E2008". Czy to prawda, że ​​nie możesz tego zrobić (widziałem plotki, ale nie mam oficjalnej dokumentacji) czy robię coś nie tak?

Odpowiedz

10

Użytkownik nie zdefiniował dokładnie tego typu. Tak więc kompilator ma problemy z ich dopasowaniem. Jeśli zdefiniować typ takich jak:

type 
    TObjectArray = array of TObject; 

Nie ma co do tego wątpliwości i (dzięki Mghie) należy używać parametru var ponieważ resising może spowodować zmianę wskaźnika.

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

Powinien być parametrem var? – mghie

+0

Dobra uwaga. Poprawiono to. –

+0

Ta odpowiedź pomija kluczowy punkt, który jest różnicą między otwartymi tablicami a tablicami barwnymi. –

9

Jesteś mieszanie otwarte tablice (parametr Resize) i dynamiczne tablice (co setlength oczekuje). Aby uzyskać wyjaśnienie, patrz here - szczególnie część zatytułowana "Confusion".

+0

Dzięki Gerhardt. Wciąż się uczę tego. :) – conciliator

Powiązane problemy