次のようなコードがある場合:
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 を呼び出さなければならないことを理解できないのはなぜですか?
ジャルフの答えを読んだ後、私はそれをさらに減らしました。これもうまくいきません。あまり直感的ではありません。
struct A {
virtual void f(int) {}
};
struct B : public A {
void f(void*) {}
};
int main() {
B b;
b.f(1);
return 0;
}