Q&A

  • overload 에러(E2250) 문제
안녕하세요.
제가 overload 함수를 쓰는데 벌써 며칠째 해결이 안되어서 여기에 질문하게 되었습니다.

우선 아래와 같이 overload 함수를 선언했구요.
<!--CodeS-->
function  AutoFree( inObject: TObject ): IAutoFree; overload;
function  AutoFree( inObject: TObject; out outObject: TObject ): IAutoFree; overload;
<!--CodeE-->

그리고 다음과 같이 썼습니다.
<!--CodeS-->
AutoFree( GetADOConMan().GetADOConnection() );
AutoFree( GetADOConMan().GetADOConnection(), TObject( ADOQuery.Connection ) );
<!--CodeE-->
위 코드에서 인수에 넣는 것은 둘다 TADOConnection 객체 입니다.

그런데 여기서 인수 하나짜리 AutoFree를 호출할 때는 전혀 문제가 없는데, 두개짜리 AutoFree 를 호출하게 되면 에러가 발생합니다.
에러는 다음과 같구요.

E2250 There is no overloaded version of 'AutoFree' that can be called with these arguments

여기서 만약 두번째 인수에 로컬변수를 선언해서 다음과 같이 하면 전혀 문제없이 컴파일 됩니다.
<!--CodeS-->
var
  tmpT : TADOConnection
begin
  AutoFree( GetADOConMan().GetADOConnection(), TObject( tmpT ) );
end
<!--CodeE-->

지역변수를 인수로 주었을 경우는 잘 되는데, 왜 위와 같은 에러가 날까요? 누가 설명좀 해주세요. ㅜoㅜ

2  COMMENTS
  • Profile
    최용일 2009.04.22 20:31
    파라매터 문제군요...
    out 파라매터는 var파라매터처럼 참조에 의한 호출입니다. 때문에 상수나 객체의 속성은 객체의 속성은 파라매터로 넘겨줄 수가 없습니다.
    ADOQuery.Connection을 다른 변수에 대입해서 파라매터로 넘겨주세요.
  • Profile
    김성배 2009.04.30 19:00
    감사합니다. 많은 도움 되었습니다. ^^