Delphi的:SetLength()上型“TObject的数组”的参数(Delphi: SetLe

2019-09-02 03:48发布

我试图调整作为参数,例如,通过某一类的数组

procedure Resize(MyArray: Array of TObject);
begin
  SetLength(MyArray, 100);
end;

然而,这引起了一个错误“E2008不兼容的类型”。 这是真的,你不能做到这一点(我见过的传闻,但没有正式的文档)还是我做错了什么?

Answer 1:

您没有明确定义的类型。 所以编译器有匹配他们的问题。 如果定义的类型,如:

type
  TObjectArray = array of TObject;

有一点毫无疑问,你应该使用一个变量参数,因为resising可能导致指针的变化(感谢Mghie)。

procedure Resize(var MyArray: TObjectArray);
begin
  SetLength(MyArray, 100);
end;


Answer 2:

你是混合的开放数组 (调整尺寸的参数)和动态数组 (什么SetLength预期)。 见这里的一个解释-尤其是标题为“混乱”的一部分。



文章来源: Delphi: SetLength() on argument of type “array of TObject”