Tengo una clase base que tiene dos funciones del mismo nombre pero con diferentes firmas en una herencia de dos niveles.No se puede encontrar la función de clase base si la clase base tiene dos funciones del mismo nombre
struct A {
virtual void f(int) { }
virtual void f(int, int) { };
virtual void f1(int) { }
};
struct B: public A { };
struct C: public B {
void f(int, int) { }
void f1(int) { }
};
int main() {
C obj;
obj.f1(0);
obj.f(0,0);
obj.f(0); // (1) cannot be found
obj.B::f(0); // (2) works
}
lo que habría esperado que mi compilador (gcc-4.3.2) para encontrar la definición correcta en (1)
, pero me da
g++ main.cpp -o main
main.cpp: In function 'int main()':
main.cpp:20: error: no matching function for call to 'C::f(int)'
main.cpp:10: note: candidates are: virtual void C::f(int, int)
distcc[2200] ERROR: compile main.cpp on localhost failed
make: *** [main] Error 1
(2)
en los otros trabajos manuales.
¿Qué necesito arreglar para que (1)
funcione en general?
+1 para el post bien escrito con el ejemplo completo –