Я просмотрел Delphi: массив несовместимых типов Char и TCharArray и начал экспериментировать. То, что я обнаружил, довольно интересно.
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'
С чего бы это?
После некоторого поиска я обнаружил этот отчет по контролю качества. Я использую Delphi 2009, и это все еще происходит.
AnsiChar
), что довольно странно, поскольку между целым числом иAnsiChar
очень мало различий. - person Andreas Rejbrand   schedule 23.09.2010[closed]
в отчете CQ (может быть, это слишком поздно для меня), но если бы я догадался, я бы сказал, что это все та же ошибка. ;-) - person splash   schedule 23.09.2010