Delphi:SetLength()关于类型“TObject数组”的参数

时间:2009-10-29 08:47:10

标签: delphi arrays object resize

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

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

但是,这会引发错误“E2008不兼容的类型”。是不是你不能这样做(我看过谣言,但没有官方文件)或者我做错了什么?

2 个答案:

答案 0 :(得分:10)

您没有明确定义类型。因此编译器在匹配它们时遇到问题。如果您定义类似的类型:

type
  TObjectArray = array of TObject;

毫无疑问,(感谢Mghie)您应该使用var参数,因为重新调整可能会导致指针发生变化。

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

答案 1 :(得分:9)

您正在混合开放阵列(Resize的参数)和动态数组(SetLength期望的内容)。请参阅here以获得解释 - 尤其是标题为“混淆”的部分。