0
다음 코드에서는 _tmain (..)에서 D :: f를 호출 할 때 모호한 오류가 발생합니다. B :: f가 A :: f를 재정의했기 때문에 A :: f, A :: f의 포인터 vtable은 B :: f를 가리 킵니다.C++ 상속 오류 : 모호한 오류
1) 왜 컴파일러가 모호한 오류를 발생시키는 이유는 무엇입니까? 누군가 분명히 해줄 수 있겠 어?
2) B :: f (int)를 B :: f (char)로 변경하여 A :: f (int)를 오버로드하려고 시도했지만 오류가 사라지지 않았습니다! 그게 왜?
상속 다이어그램 :
............A......
........../.|.\....
........A1..B..C...
..........\.|./....
............D......
코드 : 당신은 struct A1
에 대한 귀하의 상속 정의를 변경해야
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