Ответ 1
Это большая ошибка!
В контексте C
"A
" означает "введенное имя класса A
, которое я получаю с моей базы".
Вы могли бы подумать об этом как C::B::A
.
Конечно, эта база недоступна из-за частного наследования:
class A {};
class B : private A {
public:
B() {}
B(const A&) {}
};
class C : public B {
public:
C(const A&) {}
};
int main()
{
A a;
B b(a);
C c(a);
}
// main.cpp:11:13: error: 'class A A::A' is inaccessible within this context
// C(const A&) {}
// ^
// main.cpp:1:9: note: declared here
// class A {};
// ^
(живая демонстрация)
Вы можете исправить это, вызвав его ::A
, используя более косвенный маршрут, чтобы на самом деле назвать тот же самый тип:
class A {};
class B : private A {
public:
B() {}
B(const A&) {}
};
class C : public B {
public:
C(const ::A&) {}
};
int main()
{
A a;
B b(a);
C c(a);
}
// OK
(живая демонстрация)
В стороне, точно такая же логика применяется к private
унаследованным переменным-членам:
int x = 1;
class A
{
private:
int x = 2;
};
class B : A {
public:
B() { int y = x; }
};
int main()
{
A a;
B b(a);
}
// main.cpp: In constructor 'B::B()':
// main.cpp:11:17: error: 'int A::x' is private within this context
// B() { int y = x; }
(живая демонстрация)
Все это кажется довольно глупым на первый взгляд, но, вероятно, есть веская причина.
В вашем случае:
Container2(const ::QByteArray &ba);