Ich schaute auf Delphi: array of Char and TCharArray "Incompatible Types" und begann zu experimentieren. Was ich entdeckt habe, ist ziemlich interessant.Ist ein dynamisches Array von Char erlaubt, wenn der Parametertyp ein offenes Array von Char ist?
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.
Dieses einfache Beispiel zeigt, wie Sie ein Dynamic Array an eine Prozedur übergeben können, die einen Open Array-Parameter verwendet. Es kompiliert und läuft genau wie erwartet.
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.
ist hier fast identischen Code der einzige Unterschied ist es eine Reihe von Char
statt Integer
verwendet. Es kompiliert nicht. Stattdessen spuckt der Compiler aus:
E2010 Incompatible types: 'Array' and 'Dynamic array'
Warum sollte das sein?
Nach der Suche nach einer Weile habe ich this QC-Bericht entdeckt. Ich betreibe Delphi 2009 und es passiert immer noch.
Was ist "wie erwartet"? Das Array wird im ersten Fall nicht gelöscht. –
Dennoch, +1, nur für einen der Fälle kompilieren (auch wenn wir 'AnsiChar' verwenden), was ziemlich seltsam ist, da es einen sehr kleinen Unterschied zwischen einer Ganzzahl und einem' AnsiChar' gibt. –
@Andreas, Ok du hast mich da. Ein leeres Array hat nichts zu löschen. Mein Testcode hatte einen Aufruf von SetLength, aber ich entfernte ihn, da er für den Kompilierungsfehler nicht direkt relevant war. –