假如有一个类Tman,我写了一个过程是这样写的;
procedure say(aman:Tman)
begin
showmessage(aman.name);//name表示一个人的名字;
end;
我在程序中这样调用;
say(tman.create) 可以执行
但如果将 过程改为
procedure say(var aman:Tman)
begin
showmessage(aman.name);//name表示一个人的名字;
end;
程序中再调用 say(tman.create)就提示形参与实参类型不一致,
两个过程只有一个var的区别,但转递的都是一个tman的对象(其实是一个指针)而已,我知道,var是按地址进行转递,没有var按值进行转递,但怎么会出现形参实参类型不致的问题?有时我用窗体作为参数传递时也会出现这样一个情况,这是怎么回事,这两上过程的参数到底有什么区别,请高手指教多谢!!!!
procedure say(aman:Tman)
begin
showmessage(aman.name);//name表示一个人的名字;
end;
我在程序中这样调用;
say(tman.create) 可以执行
但如果将 过程改为
procedure say(var aman:Tman)
begin
showmessage(aman.name);//name表示一个人的名字;
end;
程序中再调用 say(tman.create)就提示形参与实参类型不一致,
两个过程只有一个var的区别,但转递的都是一个tman的对象(其实是一个指针)而已,我知道,var是按地址进行转递,没有var按值进行转递,但怎么会出现形参实参类型不致的问题?有时我用窗体作为参数传递时也会出现这样一个情况,这是怎么回事,这两上过程的参数到底有什么区别,请高手指教多谢!!!!
这样传的参数实际上成了指针(地址)的指针(地址)
比如
procedure setName(aman:Tman)
begin
aman.name:='a';
end; setName(aman)
say(aman:Tman)提示的就是a了,
var定义的参数不能tman.create直接传递,定义一个变量接受tman.create,再把该变量做参就得
var
a: tman;
begin
a := tman.create;
say(a);