2013-01-19 1 views
3

Delphi 2006에서 Delphi XE2로 프로젝트를 업그레이드하는 중에 컴파일 오류가 발생했습니다 'SendMsg'의 오버로드 된 버전이 없습니다. '이 인수로 호출 할 수 있습니다. 이것은 문제가있는 코드입니다.이 인수로 호출 할 수있는 '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 기능과 관련이 있지만 확실하지 않은 부분까지 범위를 좁혔습니다. 함수에서 반환 된 값을 Integer로 캐스팅하면 컴파일이 잘되지만 왜해야하는지 알 수 없습니다.

+0

글쎄, 당신이 제공 한 코드가 이미 모든 정수 값이기 때문에 "캐스트로 정수"에 대해 정확히 무슨 뜻인지 모르겠으므로'GetNextMsgID' 함수라고 생각하지 않습니다. –

+0

이 절차에서 전달 된 값 유형을 제공 할 수 있습니까? ''cUpgradeError'는'Msg'와 같은'String' 타입이어야하며, 여러분이 위에 게시 한'FConnection.GetNextMsgID'는 이미 정수입니다. –

+0

정확하게, 나는 또한 혼란 스럽다. 코드를 'FConnection.SendMsg (cUpgradeError, Msg, Integer (FConnection.GetNextMsgID));로 변경하면 컴파일됩니다. – energ1ser

답변

2

내 생각에 FConnection.SendMsg(cUpgradeError, Msg, FConnection.GetNextMsgID);FConnection.GetNextMsgID을 함수 결과 대신 함수 포인터로 해석하려고합니다.

FConnection.SendMsg(cUpgradeError, Msg, FConnection.GetNextMsgID());으로 변경하면 함수 결과가 대신 표시됩니다.

관련 문제