【发布时间】:2015-09-09 11:54:39
【问题描述】:
struct A {
virtual void foo() { std::cout << "a";};
};
struct B:public virtual A {
void foo() { std::cout << "b";}
};
struct C:public virtual A {
void foo() { std::cout << "c";}
};
struct D:public B, public C {
};
int main() {
return 0;
}
所以这个在编译时给了我们以下错误:
\main.cpp:16:8: error: no unique final overrider for 'virtual void A::foo()' in 'D'
struct D:public B, public C {
如果我们让 B 和 C 结构的继承成为非虚拟的,那么代码正在编译没有任何错误(当然,如果我们调用 dd.foo( ))。那么有什么区别呢?为什么虚拟继承类会报错,直接继承不会报错?
【问题讨论】:
-
我认为这不是stackoverflow.com/questions/21558/…的复制品
-
我投票支持重新开放。这个问题是关于一个特定的细节,在标记的副本中没有详细介绍。
-
@OthmanBenchekroun,答案不是直接在虚拟继承的定义中,而是从定义中得出。
-
@chris 我同意,它仍然需要解释(就像你做的那样)
-
错误的哪一部分不清楚?没有唯一的最终覆盖器。
标签: c++ inheritance virtual virtual-inheritance