问题描述
我无法编译这种平和的代码。为什么? 在编译得到 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
。