Delphi: 对象数组的参数使用SetLength()函数

6

我正在尝试调整作为参数传递的某个类的数组大小,例如:

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

然而,这会引发一个“E2008 不兼容的类型”错误。您不能这样做(我见过一些传言,但没有官方文档),还是我做错了什么?

2个回答

10

您没有明确定义类型。因此,编译器在匹配类型时会出现问题。如果您像这样定义类型:

type
  TObjectArray = array of TObject;

毫无疑问,你应该使用一个var参数,这是由Mghie提出的建议,因为调整大小可能会导致指针发生变化。

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

这个答案忽略了关键点,即开放数组和动态数组之间的区别。 - David Heffernan

9
您混淆了开放数组(Resize的参数)和动态数组(SetLength所需的内容)。请参见此处的解释,特别是标题为“混淆”的部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接