我正在尝试调整作为参数传递的某个类的数组,例如
procedure Resize(MyArray: Array of TObject);
begin
SetLength(MyArray, 100);
end;
但是,这会引发错误“E2008不兼容的类型”。是不是你不能这样做(我看过谣言,但没有官方文件)或者我做错了什么?
答案 0 :(得分:10)
您没有明确定义类型。因此编译器在匹配它们时遇到问题。如果您定义类似的类型:
type
TObjectArray = array of TObject;
毫无疑问,(感谢Mghie)您应该使用var参数,因为重新调整可能会导致指针发生变化。
procedure Resize(var MyArray: TObjectArray);
begin
SetLength(MyArray, 100);
end;
答案 1 :(得分:9)
您正在混合开放阵列(Resize的参数)和动态数组(SetLength期望的内容)。请参阅here以获得解释 - 尤其是标题为“混淆”的部分。