考虑以下代码:
TForm3 = class(TForm)
public
class procedure GetAConn(var res:String); overload;
class procedure GetAConn(var res:Integer);overload;
{ Public declarations }
end;
class procedure TForm3.GetAConn(var res: String);
begin
showmessage(res);
end;
class procedure TForm3.GetAConn(var res: Integer);
begin
showmessage(IntToStr(res))
end;
编译没有任何问题。
现在,如果我这样做:
procedure TForm3.FormCreate(Sender: TObject);
begin
TForm3.GetAConn('aaa');
TForm3.GetAConn(10);
end;
我得到[DCC错误] Unit3.pas(64):E2250没有可以使用这些参数调用的'GetAConn'的重载版本。
我在Delphi XE中没有发现有关此限制的内容。
LE:正在以这种方式工作:
class procedure TForm3.GetAConn(var res: String);
begin
res := res + 'modif';
end;
class procedure TForm3.GetAConn(var res: Integer);
begin
res := res + 100;
end;
procedure TForm3.FormCreate(Sender: TObject);
var s:String;
i:Integer;
begin
s:='aaa';
TForm3.GetAConn(s);
showmessage(s);
i:=10;
TForm3.GetAConn(i);
showmessage(IntToStr(i))
end;
答案 0 :(得分:6)
您正在传递参数by reference。放弃var
,一切顺利:
class procedure GetAConn(const res: String); overload;
class procedure GetAConn(res: Integer); overload;
(因为你没有修改字符串参数,我建议把它作为const
传递。)
如果确实需要引用参数,那么当然不能传递文字或常量。但这与使用overload
无关。 (除了重载模糊了错误信息这一事实。)