我有这个
A
/ \
B C
\ /
D
A 有一个纯虚函数,原型(prototype)为:
virtual A* clone(void) const = 0;
B和C实际上继承自A(class B: public virtual A
, class C: public virtual A
)
B 有虚函数,原型(prototype)为:
virtual B* clone(void) const {};
C 有虚函数,原型(prototype)为:
virtual C* clone(void) const {};
D 像这样从 B 和 C 继承:class D: public B, public C
D 具有虚函数,原型(prototype)为:
virtual D* clone(void) const {};
现在,编译时出现以下 6 行错误:
error C2250: 'D' : ambiguous inheritance of 'B *A::clone(void) const'
不知道如何解决这个问题。
提前致谢。
最佳答案
如果您只希望在您的层次结构中有一个父拷贝,请使用虚拟继承。
class B : public virtual A
编辑:
MSVC++ 2010 中可能存在错误。Intellisense 未检测到问题,但编译器对此进行了阻塞。奇怪,因为 VC6 对此很满意。
作为变通方法,如果您按如下方式声明 D,它会使 MSVC++ 2010 满意,同时在编译器中工作时也不会出现此问题:
class D: public virtual A, public B, public C
关于C++ Weird Diamond继承问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592648/