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
是virtual
相對於DD
(通過D1
)那麼爲什麼它仍然i
含糊不清?
(如果我沒有記錯正確的,舊的VC++(2006年),是有足夠的能力來辨認出這只是單virtual
繼承)
這是一個很好的鏈接,但正如你所說;它顯示了觀察。我想知道**背後的原因**。 (簡而言之)發生了什麼。 – iammilind
我認爲關於[虛擬繼承](http://en.wikipedia.org/wiki/Virtual_inheritance)的文章可能會更深入地理解引擎蓋下發生的事情。 – eran
維基百科鏈接不是答案。 – cHao