#c #g
#c #g
Вопрос:
При попытке использовать тип предка в качестве параметра в конструкторе 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. Почему вы используете частное наследование?
Ответ №1:
Вам нужно полностью указать квалификатор 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){}
};