如果我有这样的代码:
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;
}
Run Code Online (Sandbox Code Playgroud)
我收到一个错误,指出我正在尝试从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;
}
Run Code Online (Sandbox Code Playgroud)