[英]Multiple inheritance from multiple inheritance
#include<iostream>
using namespace std;
class base1{
public:
int x;
};
class base2{
public:
int x;
};
class derived1: public base1, public base2{
// Contains... base1::x, base2::x
};
class derived2: public base1, public base2{
// Contains... base1::x, base2::x
};
class derived: public derived1, public derived2{
};
如果我是對的, derived
的類將包含四個整數。 但是我無法使用
derived1::base1::x, derived1::base2::x, derived2::base1::x, derived2::base2::x
它顯示了歧義錯誤。 ('base1' is ambiguous base of 'derived')
我想念什么嗎? 我該如何解決?
好吧,當您使用范圍解析運算符消除成員之間的歧義時,您無需為成員指定“路徑”。 相反,您可以間接命名成員所屬的基類。
由於將類名注入到該類的范圍內,並且因此,將其注入到任何派生自該類的類的范圍內,因此您base1
冗長的方式命名了base1
和base2
。 即,以下所有條件對於成員訪問都是等效的:
derived d;
d.base1::x;
d.derived1::base1::x;
d.derived1::derived1::base1::base1::x;
這就是產生歧義的原因。 要做到這一點,是將對象轉換成derived1&
或derived2&
,然后通過使用成員訪問base1::x
和base2::x
上。
static_cast<derived1&>(d).base1::x;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.