在下一个代码中,在 _tmain(..) 中调用 D::f 时出现模棱两可的错误,因为 B::f 覆盖了 A::f,A::vtable 中指向 f 的指针指向 B::f。
1)为什么编译器会给出模棱两可的错误?有人可以澄清一下吗?
2)我试图通过将 B::f(int) 更改为 B::f(char) 来重载 A::f(int) 但错误并没有消失!这是为什么?
继承图:
............A......
........../.|.\....
........A1..B..C...
..........\.|./....
............D......
编码:
struct A {
virtual void f(int x) {cout << "A::f";};
virtual void g(int x) {cout << "A::g";};
private: int n;
};
struct A1: A {
virtual void h(int x) {f(x);};
};
struct B : virtual A {
void f(int x) {cout << "B::f";};
};
struct C : virtual A {
void g(int x) {cout << "C::g";};
};
struct D : A1, B , C {
};
int _tmain(int argc, _TCHAR* argv[])
{
D* d = new D();
d->f(1);
return 0;
}