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

con*_*tor 6 arrays delphi resize object

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

procedure Resize(MyArray: Array of TObject);
begin
  SetLength(MyArray, 100);
end;
Run Code Online (Sandbox Code Playgroud)

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

Too*_*the 10

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

type
  TObjectArray = array of TObject;
Run Code Online (Sandbox Code Playgroud)

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

procedure Resize(var MyArray: TObjectArray);
begin
  SetLength(MyArray, 100);
end;
Run Code Online (Sandbox Code Playgroud)

  • 应该是var参数吗? (3认同)

Uli*_*rdt 9

您正在混合开放数组(Resize的参数)和动态数组(SetLength期望的内容).请参阅此处获取解释 - 尤其是标题为"混乱"的部分.