我在看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,它仍在发生。