struct A {
virtual void f(){}
};
struct B1: virtual A {
virtual void f() {}
};
struct B2 : virtual A {
virtual void f() {}
};
struct C :B1,B2 {
};
错误 C2250 C:不明确的继承“void A::f(void)”。这是什么意思?
struct A {
virtual void f(){}
};
struct B1: virtual A {
virtual void f() {}
};
struct B2 : virtual A {
virtual void f() {}
};
struct C :B1,B2 {
};
错误 C2250 C:不明确的继承“void A::f(void)”。这是什么意思?
嗯,非常简短......标准说 -
如果继承是非虚拟的,那么在您的示例中,结束覆盖为
B1::A::f
isB1::f
,结束覆盖为B2::A::f
isB2::f
。那些。每个虚函数都有一个覆盖(好吧,或者每个末端覆盖都有自己的虚函数。但如果它是虚的,那么这样的功能是
A::f
唯一的,它有两个重叠。上面的一个有效。但值得将您的叠加层添加到
C
-歧义如何消失。
或多或少是这样的……