Если у меня есть такой код:
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;
}
Я получаю сообщение об ошибке, которое говорит, что я пытаюсь сделать неверное преобразование из int в void *. Почему компилятор не может понять, что он должен вызывать B:: f, поскольку обе функции объявлены как виртуальные?
После прочтения jalf ответа я пошел и уменьшил его еще больше. Это тоже не работает. Не очень интуитивно.
struct A {
virtual void f(int) {}
};
struct B : public A {
void f(void*) {}
};
int main() {
B b;
b.f(1);
return 0;
}