setLength 在 setLength(arr[i] 时改变 TBoundArray 的类型

setLength change type of TBoundArray when setLength(arr[i]

我无法编译这段安静的代码。为什么? 在编译得到 E2010 不兼容的类型:'TBoundArray' 和 'Array'

代码试图通过将相同的值+10000 推送到子数组末尾的每个维度来更改传入数组。

function Tpt.T(var arr: array of TBoundArray): TBoundArray;
var
  i:Integer;
  j:Integer;
  size:Integer;
  const movObjInd: Integer = 10000;
begin
  for i := Integer(0) to Length(arr) do
  begin
  size:= Length(arr);
  setLength(arr[i],(Length(arr[i])+1)*2);

  j:=0;
    while j < size+1 do
    begin
      if arr[i][j] = 0 then
      begin
        inc(size);
        Continue;
      end;

      Inc(size);
      arr[i][size]:= arr[i][j] + movObjInd;
    end;
  end;
  result:= arr;
end;

result:= arr; 正在尝试将 TBoundArray 个元素的 开放数组 分配给单个 TBoundArray。那是行不通的,这就是您收到错误的原因。

由于您是直接修改 arr 数组的元素,因此无需通过函数的 Result return 任何元素。所以你应该把它改为 procedure