Si j'ai un code comme celui-ci :
struct A {
virtual void f(int) {}
virtual void f(void*) {}
};
struct B : public A {
void f(int) {}
};
struct C : public B {
void f(void*) {}
};
int main() {
C c;
c.f(1);
return 0;
}
J'obtiens une erreur qui me dit que j'essaie de faire une conversion invalide de int à void*. Pourquoi le compilateur ne comprend-il pas qu'il doit appeler B::f, puisque les deux fonctions sont déclarées comme virtuelles ?
Après avoir lu la réponse de Jalf, je l'ai encore réduit. Celle-ci ne fonctionne pas aussi bien. Elle n'est pas très intuitive.
struct A {
virtual void f(int) {}
};
struct B : public A {
void f(void*) {}
};
int main() {
B b;
b.f(1);
return 0;
}