如果'C'从'B'公开继承,B私下从'A'继承,为啥我不能在'C'内部创建'A'的对象? [复制]
Posted
技术标签:
【中文标题】如果\'C\'从\'B\'公开继承,B私下从\'A\'继承,为啥我不能在\'C\'内部创建\'A\'的对象? [复制]【英文标题】:If 'C' inherits from 'B' publicly, B inherits from 'A' privately, Why can't I create an object of 'A' inside 'C'? [duplicate]如果'C'从'B'公开继承,B私下从'A'继承,为什么我不能在'C'内部创建'A'的对象? [复制] 【发布时间】:2020-05-30 22:08:35 【问题描述】:我正在使用 Visual C++,如果我编译这段代码:
class A ;
class B : private A ;
class C : public B
void func()
A a;
;
我收到此错误:
错误 C2247:“A”不可访问,因为“B”使用“私有”继承 来自'A'
我知道如果我使用私有继承,那么类'A'的成员在'B'中是私有的,而在'C'中是不可访问的,但是为什么我不能在里面创建'A'的对象'C'?
【问题讨论】:
【参考方案1】:问题在于类 C 范围内的名称 A
是私有名称。
就是所谓的注入类名。
来自 C++ 标准(6.3.2 声明点)
8 注入类名(第 12 条)的声明点是 紧跟在类定义的左大括号之后。
使用以下使用限定名的方法
class A ;
class B : private A ;
class C : public B
void func()
::A a;
//^^^^^^
;
【讨论】:
以上是关于如果'C'从'B'公开继承,B私下从'A'继承,为啥我不能在'C'内部创建'A'的对象? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
为啥 Adapter 会从 Target 公开继承,而从 Adapter 私下继承?