c ++不能在构造函数中使用父类型作为参数

问题描述 投票:1回答:1

当尝试将祖先类型作为构造函数中的参数时,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
 {
 ^
c++ g++
1个回答
3
投票

你需要完全限定符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){}
};
© www.soinside.com 2019 - 2024. All rights reserved.