如果我有这样的代码:
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;
}