以对象作为参数时,提示形参和实参不一致的有关问题
以对象作为参数时,提示形参和实参不一致的问题
假如有一个类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(var aman:Tman)
这样传的参数实际上成了指针(地址)的指针(地址)
比如
procedure setName(aman:Tman)
begin
aman.name:='a';
end;
setName(aman)
say(aman:Tman)提示的就是a了,
------解决方案--------------------
procedure say(var aman:Tman);
say(tman.create);
var定义的参数不能tman.create直接传递,定义一个变量接受tman.create,再把该变量做参就得
var
a: tman;
begin
a := tman.create;
say(a);
假如有一个类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(var aman:Tman)
这样传的参数实际上成了指针(地址)的指针(地址)
比如
procedure setName(aman:Tman)
begin
aman.name:='a';
end;
setName(aman)
say(aman:Tman)提示的就是a了,
------解决方案--------------------
procedure say(var aman:Tman);
say(tman.create);
var定义的参数不能tman.create直接传递,定义一个变量接受tman.create,再把该变量做参就得
var
a: tman;
begin
a := tman.create;
say(a);