我试图调整作为参数,例如,通过某一类的数组
procedure Resize(MyArray: Array of TObject);
begin
SetLength(MyArray, 100);
end;
然而,这引起了一个错误“E2008不兼容的类型”。 这是真的,你不能做到这一点(我见过的传闻,但没有正式的文档)还是我做错了什么?
我试图调整作为参数,例如,通过某一类的数组
procedure Resize(MyArray: Array of TObject);
begin
SetLength(MyArray, 100);
end;
然而,这引起了一个错误“E2008不兼容的类型”。 这是真的,你不能做到这一点(我见过的传闻,但没有正式的文档)还是我做错了什么?
您没有明确定义的类型。 所以编译器有匹配他们的问题。 如果定义的类型,如:
type
TObjectArray = array of TObject;
有一点毫无疑问,你应该使用一个变量参数,因为resising可能导致指针的变化(感谢Mghie)。
procedure Resize(var MyArray: TObjectArray);
begin
SetLength(MyArray, 100);
end;
你是混合的开放数组 (调整尺寸的参数)和动态数组 (什么SetLength预期)。 见这里的一个解释-尤其是标题为“混乱”的一部分。