0

考虑这段代码:

  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;
4

1 回答 1

6

通过引用传递参数。删除var,一切都应该很好:

class procedure GetAConn(const res: String); overload;
class procedure GetAConn(res: Integer); overload;

(由于您不修改字符串参数,我建议将其传递为const.)

如果您确实需要引用参数,那么您当然不能传递文字或常量。但这与使用无关overload。(除了重载会混淆错误消息这一事实。)

于 2012-11-09T11:21:44.180 回答