C 不能将父类型用作构造函数中的参数

c++ Cannot use parent type as parameter in constructor

本文关键字:构造函数 参数 不能 父类 类型      更新时间:2023-10-16

试图将祖先类型作为构造函数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){}
};