2011-09-21 77 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