这是一个很好的错误!
在上下文中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);