setLengtharr [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返回它们中的任何一个。因此,您应该改为将其更改为procedure