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」のオーバーロードされたバージョンはありません。

DelphiXEでこれが制限されていることについては何も見つかりませんでした。

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 に答える