我现在正在学习C ++虚拟派生中不同的歧义情况。 但是我的代码中存在歧义错误,我不理解它的原因......
这是我的代码:
class V {
public:
int v ;
};
class A {
public:
int a ;
};
class B : public A, public virtual V {
};
class C : public A, public virtual V {
};
class D : public B, public C {
public:
void f() ;
};
void g() {
D d ;
B* pb = &d ; // No Problem
A* pa = &d ; // Error: 'A' is ambiguous base of 'D'
V* pv = &d ; // No Problem
}
我不明白为什么会出现这个错误,但我没有其他做法的错误。
谢谢: - )
答案 0 :(得分:2)
multiple inheritance的情况完全可以预料到这一点。我们这里有一个钻石继承案例。 D现在有两个A副本,一个从B继承,一个从C继承。你需要指定暴露给D的A成员来自B或C中的哪一个。
请参阅:Using C++, how do I correctly inherit from the same base class twice?
您可以考虑:
使用虚拟继承:
class B : public virtual A, public virtual V {...};
class C : public virtual A, public virtual V {...};
使用合成作为多重继承的一种方式。