El siguiente fragmento produce una "llamada ambigua a foo" error durante la compilación, y me gustaría saber si hay alguna manera de evitar este problema sin calificar totalmente la llamada a foo:¿Por qué las funciones heredadas múltiples con el mismo nombre pero diferentes firmas no se tratan como funciones sobrecargadas?
#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;
}
Por lo tanto, la pregunta es como dice el título. Ideas? Quiero decir, los siguientes trabajos sin problemas:
#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;
}
agregue declaraciones de registro dentro de los dos foo (en el segundo caso) a la constante que se llama función, se sorprenderá ... C++ está lleno de regla arcana;) –
@Matthieu: * jadeo *! Malditas reglas para esconderse. :( – Xeo