gpt4 book ai didi

c++ - 如果 'C' 公开继承自 'B',B 私自继承自 'A',为什么我不能在 'A' 内部创建 'C' 的对象?

转载 作者:行者123 更新时间:2023-12-01 12:44:06 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why does having a declaration of a private base class render a type name inaccessible?

(1 个回答)


2年前关闭。




我正在使用 Visual C++,如果我编译这段代码:

class A {};
class B : private A {};
class C : public B
{
void func()
{
A a{};
}
};

我收到此错误:

error C2247: 'A' not accessible because 'B' uses 'private' to inherit from 'A'



我知道如果我使用私有(private)继承,那么类'A'的成员在'B'中将是私有(private)的,并且在'C'中不可访问,但是为什么我不能在'C'中创建'A'的对象?

最佳答案

问题是名称 A在类 C 的范围内是一个私有(private)名称。

就是所谓的注入(inject)类名。

来自 C++ 标准(6.3.2 声明点)

8 The point of declaration for an injected-class-name (Clause 12) is immediately following the opening brace of the class definition.



使用以下方法,即使用限定名称
class A {};
class B : private A {};
class C : public B
{
void func()
{
::A a{};
//^^^^^^
}
};

关于c++ - 如果 'C' 公开继承自 'B',B 私自继承自 'A',为什么我不能在 'A' 内部创建 'C' 的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60237668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com