私はDelphi: array of Char and TCharArray "Incompatible Types"を見ていて、実験を始めました。私が発見したことは、かなり興味深いものです。
procedure Clear(AArray: array of Integer);
var
I: Integer;
begin
for I := Low(AArray) to High(AArray) do
AArray[I] := 0;
end;
var
MyArray: array of Integer;
begin
Clear(MyArray);
end.
この簡単な例は、Open Array パラメータを使用して動的配列をプロシージャに渡す方法を示しています。期待どおりにコンパイルして実行します。
procedure Clear(AArray: array of Char);
var
I: Integer;
begin
for I := Low(AArray) to High(AArray) do
AArray[I] := #0;
end;
var
MyArray: array of Char;
begin
Clear(MyArray);
end.
これはほぼ同じコードですが、唯一の違いはChar
ではなくの配列を使用していることですInteger
。コンパイルされません。代わりに、コンパイラは次のように吐き出します。
E2010 Incompatible types: 'Array' and 'Dynamic array'
これはなぜでしょうか?
しばらく検索した後、このQC レポートを見つけました。Delphi 2009 を実行していますが、まだ発生しています。