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
。
我无法编译这段安静的代码。为什么? 在编译得到 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
。