2011-09-21 103 views
0
class base { 
protected: 
    base() {} 
}; 

class der1 : virtual private base { 

public: 
    der1() {} 
}; 

class der2 : public der1 
{ 
public: 
    der2() {} 

}; 

int main() { 
    der2 d; 
} 

它給編譯時錯誤:「基地::基地」:不能訪問類「基地」問題在虛擬繼承

但基類的構造函數中聲明人跡罕至成員是公開地定義它編譯。

任何人都可以給予解釋嗎?

+0

什麼是_virtual inheritance_構造? –

+0

@ Serge-appTranslator:虛擬繼承通常用於解決繼承中的鑽石問題。 – arne

回答

0

基類構造函數聲明爲protected,但這不是問題。主要問題將是der1中的私有繼承。這樣,der2無法訪問構建自己所需的構造函數base

2

因爲base是一個虛擬基類,所以它必須由實例化對象的層次結構中的派生最多的類來初始化。 base的構造器可以被保護並訪問從中派生類,但這並不能幫助作爲base是一個私人的基類的自der1衍生沒有進入base部分的‘*thisder1因此,即使類。

您需要將基地base類的訪問限制放寬至少protected

0

更換virtual private basevirtual protected baseder2將能夠訪問到的base