다음과 같은 오버로드 된 함수 호출이 모호한 이유는 무엇입니까 ??이러한 오버로드 된 함수 호출이 모호한 이유는 무엇입니까?
call of overloaded 'test(long int)' is ambiguous,candidates are: void test(A)| void test(B)|
코드 : 컴파일 오류로 오버로드 확인이 두 동등하게 실행 가능한 기능 (모두 사용자 정의 변환을) 선택하기 때문에
class A
{
public:
A(int){}
A(){}
};
class B: public A
{
public:
B(long){}
B(){}
};
void test(A a)
{
}
void test(B b)
{
}
void main()
{
test(0L);
return;
}
+1 이것은 설명을 약간 확장 할 수 있지만 공식적으로는 가장 정확한 대답입니다. – Xeo
@rhalbersma :하지만 test (0L)가 (B b)보다 정확하게 일치한다고 생각합니까? 왜 모호한가요? –
'0L'은'long'이므로 두 번째 문단은 "거기에'test (long)'가 없다고 말해야합니다." – Xeo