我想编写一个附加到Integer数组的过程,但Delphi IDE给出了编译时错误'Incompatyble types'.这是我的代码:
procedure appendToIntegerArray(var intArr : array of Integer; valueToAppend : Integer);
var
counter : Integer;
begin
counter := Length(intArr);
SetLength(intArr, counter + 1); // This is where it gives me the compile-time error
intArr[counter] := valueToAppend;
end;
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮我修复手术吗?
您正面临错误,因为SetLength操作动态数组并且不是动态数组.这是一个开放的数组参数.
您需要使用动态数组:
procedure appendToIntegerArray(var intArr: TArray<Integer>; valueToAppend: Integer);
....
Run Code Online (Sandbox Code Playgroud)
如果使用不支持通用数组的旧Delphi,则需要声明数组的类型:
type
TIntegerArray = array of Integer;
procedure appendToIntegerArray(var intArr: TIntegerArray; valueToAppend: Integer);
....
Run Code Online (Sandbox Code Playgroud)
或者你可以使用RTL中声明的类型TIntegerDynArray.此类型在Types单元中声明.
Delphi类型系统的一个不足之处在于,类似的类型与TIntegerArray赋值不兼容,比如TIntegerDynArray因为它们是不同的类型.这使得处理使用不同数组类型的代码变得更加困难.泛型数组的一大好处是泛型的类型兼容性规则更加宽容.因此,如果您可以使用TArray<T>,请执行此操作.
如果你逐项追加,那么我通常建议列表类会更好.在这种情况下,您将使用TList<Integer>并简单地调用其Add方法.
这是 Delphi 语法的怪癖之一:将 an 声明array of whatever为函数参数并不像您想象的那样将其定义为数组,而是将其定义为开放数组,一种可以接受任何正确基类型的数组的“神奇”类型。如果要使用特定类型的数组,则需要命名类型。
TArray<T>这就是泛型的设计目的。TArray<integer>如果可以的话,将参数设置为 a 。如果没有,请考虑更新到较新版本的 Delphi(如果您仍然使用旧版本,您会错过很多东西!),同时声明一个数组类型,如下所示:
type
TMyIntegerArray = array of integer;
Run Code Online (Sandbox Code Playgroud)
并使用该类型作为参数类型,而不是array of integer在那里声明。
| 归档时间: |
|
| 查看次数: |
2417 次 |
| 最近记录: |