The following snippet produces an “ambigious call to foo” error during compilation, and I’d like to know if there is any way around this problem without fully qualifying the call to 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;
}
So, question is as the title says. Ideas? I mean, the following works flawlessly:
#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;
}
Member lookup rules are defined in Section 10.2/2
So you can use the
usingdeclarationsA::fandB::fto resolve that ambiguityThe second code works flawlessly because
void foo(float)is inside C’s scope. Actuallyd.foo(5);callsvoid foo(float)and not theintversion.