3

プロジェクトをDelphi2006からDelphiXE2にアップグレードしている途中で、コンパイルエラーが発生しました。これらの引数で呼び出すことができる「SendMsg」のオーバーロードバージョンはありません。 これが問題のあるコードです。

procedure TMessageComms.UpgradeError(Msg: String);
begin
  FConnection.SendMsg(cUpgradeError, Msg, FConnection.GetNextMsgID);
end;

SendMsgメソッドは次のようになります。

procedure SendMsg(ACommand, AParamStr : String; AMsgID : Integer); overload;

procedure TMsgConnection.SendMsg(ACommand, AParamStr: String; AMsgID: Integer);
begin
  // construct message
  // send message
end;

cUpgradeErrorは、そのように宣言されたconstです。

 cUpgradeError = 'UpgradeError';

そして、これは整数を返すGetNextMsgID関数です。

function TMsgConnection.GetNextMsgID: Integer;
begin
  Inc(FLastMsgID);
  Result := FLastMsgID;
end;

パラメータはすべて私には有効なようです。GetNextMsgID関数と関係があるところまで絞り込むことができましたが、何がわかりません。関数から返された値を整数にキャストすると、正常にコンパイルされますが、なぜそうしなければならないのかわかりません。

4

1 に答える 1

2

私の推測では、それは関数の結果ではなく関数ポインタとしてFConnection.SendMsg(cUpgradeError, Msg, FConnection.GetNextMsgID);解釈しようとしていると思います。FConnection.GetNextMsgID

FConnection.SendMsg(cUpgradeError, Msg, FConnection.GetNextMsgID());代わりに関数の結果を探していることが明確になるように、に変更してください。

于 2013-01-20T20:06:53.753 に答える