动态数组+参数(100分)

  • 主题发起人 主题发起人 hug
  • 开始时间 开始时间
H

hug

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TLayoutForm.InsertArraysIfPalse(var AnArray : Array of TFloatPoint;
AIndex,APosX,APosY:integer);
var
I:integer;
TempSize:integer;
begin
TempSize:=high(AnArray)+2;
Setlength(AnArray, TempSize);
for i := AIndex+1 to High(AnArray)-1 do
AnArray[i+1] := AnArray;
AnArray[AIndex].X := AposX / AK;
AnArray[AIndex].Y := AposY / AK;
end;
当程序编译到Setlength(AnArray, TempSize);出现错误如下:
[Error] LayoutFrm.pas(1075): Incompatible types
请帮忙,谢谢
 
Setlength([数组], [数组长度]);
 
在过程或者函数中, Array of TFloatPoint表示静态数组参数,所以你不能用Setlength!
解决方法:
type
TAFP= array of TFloatPoint;

TLayoutForm.InsertArraysIfPalse(var AnArray :TAFP
{这里该为TAFP}
AIndex,APosX,APosY:integer);

 
toljlljl-79,是啊,在别的地方都可以,
但在这里就不行了,这里我是用动态数组作为参数的缘故吧?
 
我用procedure Proc(var A:array[1..10] of integer);怎么都不能编译通过,难道Delphi不能传递数组作为参数吗?

答:必须先用Type定义一下即可:
type
TProcArray=array[1..10] of integer;

procedure Proc(var A:TProcArray);
这样就没有问题了,而且对于动态数组也可以用上面的方法!使用动态数组的时候,有一个问题是如何遍历每一个数据项?采用类似的代码即可:
procedure Proc(var A:TProcArray);
var
i:integer;
begin
....
for i:=Low(A) to High(A) do
/// A就是每一个数据项
....
end;
 
ixeixe dajia ,I have a try
 
后退
顶部