es muss natürlich
arrS[
5]:='Erich';
heißen.
Aber das Verhalten ist trotzdem ziemlich merkwürdig (ich habs übrigens mit Turbo-Delphi getestet, es ist in Lazarus/FPC also sicherlich kein Bug sondern ein Feature.)
Folgendes lässt sich übersetzen:
Code: Alles auswählen
type
stringArray = array of String;
procedure Ausgelagert_1( {var} arrS: stringArray);
begin
arrS[2]:='Fritz'; // das geht noch
setlength(arrS,6); // hier Error: Type mismatch
arrS[5]:='Erich';
end;
procedure TForm1.Button1Click(Sender: TObject);
var a, r : StringArray;
i : integer;
begin
setlength(a,5);
a[0]:='Otto';
a[1]:='Otto';
a[2]:='Otto';
a[3]:='Otto';
a[4]:='Otto';
Ausgelagert_1(a);
For i:=Low(a) to High(a) do Memo1.Lines.Add(a[i]);
end;
- Warum mit der Typ-Definition nun setlength() im Unterprogramm geht, ist mir schleierhaft.
- Ohne "var" wird Fritz nun in das im Hauptprogramm erstellte Array eingetragen . (Keine Ahnung warum es vorher einen Einfluss hatte.)
- Die veränderte Array-Länge wird nur mit var zurück-gegeben. (Scheint mir nicht sehr konsistent damit, dass der Inhalt auch ohne var verändert wird).
-Michael