【发布时间】:2011-07-08 06:03:58
【问题描述】:
struct B { int i; };
struct D1 : virtual B {};
struct D2 : B {}; // <-- not virtual
struct DD : D1, D2 {};
在上面编码之后,编译器仍然要求D2 也为virtual:
DD d;
d.i = 0; // error: request for member `i' is ambiguous
我不明白的是,一旦你提示编译器B 相对于DD 是virtual(通过D1)那么为什么它仍然i 是模棱两可的?
(如果我没记错的话,较早的 VC++(2006 年)仅通过单个 virtual 继承就足以证明这一点)
【问题讨论】:
标签: c++ language-lawyer virtual-inheritance diamond-problem