一个简单的问题,关于过程的参数传递问题,请来拿分。(120分)

  • 主题发起人 主题发起人 徐凤华
  • 开始时间 开始时间

徐凤华

Unregistered / Unconfirmed
GUEST, unregistred user!
我在程序中需要将数据存放在动态数组中进行传递,但是,使用以下过程,编译器提示:
Incompatible types:'array' and 'dynamic array'.请问如何解决?
程序如下:
procedure Test(var AParam: array of String);
var
S: array of String;
begin
SetLength(S, 2);
S[0] := '0';
S[1] := '1';
AParam := Copy(S);//出错:Incompatible types:'array' and 'dynamic array'
end;
procedure RunTest;
var
Param: array of String;
begin
Test(Param);
end;

将程序重新修改如下:
procedure Test(var AParam: array of String);
begin
SetLength(AParam, 2)
//出错:Incompatible types
......
end;

procedure RunTest;
var
Param: array of String;
begin
Test(Param);
end;
请问各位高手,此问题如何解决?
 
将程序改为下面这样,便没有问题:
procedure Test(var AParam: array of String);
var
S: array of String;
i:integer;
begin
SetLength(S, 2);
S[0] := '0';
S[1] := '1';
for i:=low(s) to high(s) do //不要直接赋值,一个一个单元地赋值。
AParam := S;
end;
procedure RunTest;
var
Param: array of String;
begin
SetLength(param,2)
//在调用“TEST”之前确定“PARAM”的长度。
Test(Param);
end;
 
TouchSky老兄:
你理解错我的意思了,我在运行Test过程之前,无法确定动态数组的长度。所有只有
在Test过程中动态的改变Param的长度,可是,编译器居然提示Incompatible types。
 
呵呵,关键是你对Delphi的理解有误,
procedure Test(var AParam: array of String);
过程中的参数的 Array of String 申明的不并不是一个动态数组,而一
一个开放数组。
你需要单独申明一种数据类型如:
Type
MyArr : Array of String
...
procedure Test (Var AParam :MyArr);
这样就行了。

这里有最详细的讨论:
http://www.delphibbs.com/delphibbs/dispq.asp?lid=602645



 
你直接对AParam数组进行赋值不可以吗?
如:
AParam[0] := '0';
AParam[1] := '1';
 
谢谢杜宝朋友,你帮我解决了大问题,谢谢!
 
改成这样:
type
MyArr=Array of String;
........

procedure Test(var AParam: MyArr);
var
S: array of String;
i:integer;
begin
SetLength(S, 2);
S[0] := '0';
S[1] := '1';
SetLength(Aparam,2);
for i:=low(s) to high(s) do //不要直接赋值,一个一个单元地赋值。
AParam := S;
end;
procedure RunTest;
var
Param: array of String;
begin
Test(Param);
end;

 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部