c ++ не может использовать родительский тип в качестве параметра в конструкторе - PullRequest
0 голосов
/ 04 марта 2019

При попытке принять тип предка в качестве параметра в конструкторе 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
 {
 ^

1 Ответ

0 голосов
/ 04 марта 2019

Вам необходимо полностью указать 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){}
};
...