2009-10-29 3 views
6

引数として渡される特定のクラスの配列のサイズを変更しようとしています。Delphi: "TObjectの配列"型の引数にSetLength()を設定します。

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

ただし、「E2008互換性のないタイプ」というエラーが発生します。あなたがこれをすることができないことは本当ですか?(私は噂を見たことがありますが、公式の文書はありません)、何か間違っていますか?

答えて

10

タイプを明示的に定義しませんでした。したがって、コンパイラには問題があります。あなたがタイプのように定義する場合:

type 
    TObjectArray = array of TObject; 

をresisingは、おそらくポインタに変化を起こすのであり、それについては疑いがあると(Mghieのおかげで)あなたはvarパラメータを使用する必要があります。

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

varパラメータである必要がありますか? – mghie

+0

良い点。それを修正しました。 –

+0

この答えは、オープンアレイとダイナミックアレイの違いであるキーポイントを見逃しています。 –

9

あなたはオープン配列(リサイズのパラメータ)と動的配列を(何はsetLengthが期待する)、混合されています。説明については、hereを参照してください。特に「Confusion」という部分があります。

+0

ありがとうGerhardt。私はまだこのことを学んでいる。 :) – conciliator

関連する問題