0
在下一個代碼中,在_tmain(..) 中調用D :: f時出現模糊錯誤,因爲B :: f覆蓋A :: f,指向f中的指針A :: vtable指向B :: f。C++繼承錯誤:模棱兩可的錯誤
1)爲什麼編譯器會給出模糊的錯誤?有人可以請清楚嗎?我試圖通過將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;
}
這不是你的繼承關係圖。這就像[this](http://pastebin.com/ksTpdXZE)。 – jrok