当尝试将祖先类型作为构造函数中的参数时,g ++似乎误认为非存在的默认构造函数的类型。这里发生了什么,是否有修复?
最小的例子:
class Outer
{
};
class Middle : Outer
{
public:
Middle(int i):i(i){}
protected:
int i;
};
class Inner : Middle
{
public:
Inner(int i, Outer *o):Middle(i){}
};
g ++输出:
example.h:16:18: error: ‘class Outer Outer::Outer’ is inaccessible within this context
Inner(int i, Outer *o):Middle(i){}
^~~~~
example.h:2:1: note: declared here
{
^
你需要完全限定符Outer
,否则它是无法访问的私有基础:
class Inner : Middle
{
public:
Inner(int i, ::Outer *o):Middle(i){}
};
或者使用protected
/ public
继承链:
class Middle : public Outer
{
public:
Middle(int i):i(i){}
protected:
int i;
};
class Inner : public Middle
{
public:
Inner(int i, Outer *o):Middle(i){}
};