【发布时间】:2011-04-16 10:50:32
【问题描述】:
我正在查看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.
这个简单的小例子展示了如何使用开放数组参数将动态数组传递给过程。它完全按预期编译和运行。
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'
为什么会这样?
搜索了一段时间后,我发现了this QC 报告。我正在运行 Delphi 2009,它仍在运行。
【问题讨论】:
-
什么是“预期”?第一种情况下数组没有被清空。
-
仍然,+1,只有一种情况可以编译(即使我们使用
AnsiChar),这很奇怪,因为整数和AnsiChar之间几乎没有区别. -
@Andreas,好的,你把我带到了那里。一个空数组没有什么要清除的。我的测试代码调用了 SetLength,但我删除了它,因为它与编译错误没有直接关系。
-
抱歉,如果我遗漏了什么,请问有什么问题吗? “为什么这个错误没有解决?”
-
@splash 所以这是一个编译器错误,而不仅仅是开放数组参数的一些未记录的限制?
标签: delphi dynamic-arrays open-array-parameters