다음 코드는 컴파일시 오류 "foo는 할 ambigious 호출은"생산, 나는이 문제를 어떤 방법이 있는지 완전히 foo를하기 위해 전화를 자격없이 알고 싶습니다 :이름이 같지만 서명이 다른 다중 상속 된 함수가 오버로드 된 함수로 취급되지 않는 이유는 무엇입니까?
그래서#include <iostream>
struct Base1{
void foo(int){
}
};
struct Base2{
void foo(float){
}
};
struct Derived : public Base1, public Base2{
};
int main(){
Derived d;
d.foo(5);
std::cin.get();
return 0;
}
, 질문을 제목이 말하는대로입니다. 아이디어? 내 말은, 다음은 완벽하게 작동한다는 것입니다.
#include <iostream>
struct Base{
void foo(int){
}
};
struct Derived : public Base{
void foo(float){
}
};
int main(){
Derived d;
d.foo(5);
std::cin.get();
return 0;
}
두 번째 foo (두 번째 경우)에서 logging 문을 호출하여 함수가 호출되는 상수에 추가하면 놀랄 것입니다. C++은 난잡한 규칙으로 가득합니다.) –
@Matthieu : * gasp *! 빌어 먹을 숨어있는 규칙. : – Xeo