2017-12-21 7 views
2

Delphiに問題があります。delphiで機能するための文字列の配列を渡す方法

私はこのような機能を書いた:私は直接関数にAnsiStringの配列を渡すとき、

function MyFunction(arr: array of AnsiString): Boolean; 
begin 
    //code here 
end; 

そして今、このように、すべてが完璧に動作します:

MyFunction(['one', 'two', 'three']); 

しかし、Iこの配列を次のように格納してみてください:

var arr: array of AnsiString; 

procedure MyProcedure; 
begin 
    arr[0] := ['one', 'two', 'three']; 
    MyFunction(arr[0]); 
end; 

不一致エラーがあります。

私はDelphiの初心者ですが、これは本当に混乱しています。

+0

あなたがこの記事を見てかかることがあります: http://rvelthuis.de/articles/articles-openarr.html – MartynA

+0

なぜAnsiStringを使用していますか? –

+0

@DavidHeffernanはこれが重要ですか?文字列の配列にも同じ問題があります。 –

答えて

8

2番目の例は機能的には例と同じではありません。

最初の例は問題ありません。この関数は入力パラメータとしてopen arrayを受け取り、そのパラメータに文字列の固定配列を直接構築していますが、これはまったく問題ありません。どの配列型も、開いている配列パラメーターに渡すことができます。

2番目の例では、文字列のdynamic arrayを宣言していますが、配列にメモリを割り当てておらず、最初の要素(単一の文字列)を固定配列を指すようにしようとしています弦のそして、あなたは配列が期待されるところでその要素(再び、単一の文字列)を渡そうとしています。それがコードがコンパイルに失敗する理由です。

より、このような希望のあなたのプロシージャを記述するための正しい方法:代わり

procedure MyProcedure; 
var 
    arr: array of AnsiString; 
begin 
    SetLength(arr, 3); 
    arr[0] := 'one'; 
    arr[1] := 'two'; 
    arr[2] := 'three'; 
    MyFunction(arr); 
end; 

:また

procedure MyProcedure; 
var 
    arr: array of AnsiString; 
begin 
    arr := ['one', 'two', 'three']; 
    MyFunction(arr); 
end; 

type 
    TAnsiStringArray = array of AnsiString; 

procedure MyProcedure; 
var 
    arr: TAnsiStringArray; 
begin 
    arr := TAnsiStringArray.Create('one', 'two', 'three'); 
    MyFunction(arr); 
end; 
関連する問題