Следующий код не может скомпилироваться с этой ошибкой с g++ и аналогичной ошибкой с clang.
main.cpp:16:19: error: 'QByteArray' is a private member of 'QByteArray'
Container2(const QByteArray &ba);
^
main.cpp:3:18: note: constrained by private inheritance here
class Container1:private QByteArray
^~~~~~~~~~~~~~~~~~
../edge-clang/qt5/include/QtCore/qbytearray.h:167:21: note: member is declared here
class Q_CORE_EXPORT QByteArray
^
main.cpp:18:30: error: 'QByteArray' is a private member of 'QByteArray'
Container2::Container2(const QByteArray &ba):Container1(ba){}
^
main.cpp:3:18: note: constrained by private inheritance here
class Container1:private QByteArray
^~~~~~~~~~~~~~~~~~
../edge-clang/qt5/include/QtCore/qbytearray.h:167:21: note: member is declared here
class Q_CORE_EXPORT QByteArray
^
Я не понимаю, почему Container2 не разрешает наследовать Container1 и инициализировать его через публичный конструктор, хотя наследование QByteArray является закрытым.
#include <QByteArray>
class Container1:private QByteArray
{
public:
Container1() {}
Container1(const QByteArray &ba);
};
Container1::Container1(const QByteArray &ba):QByteArray(ba){}
class Container2:public Container1
{
public:
Container2() {}
Container2(const QByteArray &ba);
};
Container2::Container2(const QByteArray &ba):Container1(ba){}
int main(int argc,char *argv[])
{
QByteArray ba;
Container1 c1(ba);
Container2 c2(ba);
}