gpt4 book ai didi

c++ - 为什么在使用组合而不是继承时出现 C4624(基类析构函数不可访问)?

转载 作者:太空宇宙 更新时间:2023-11-04 12:02:07 25 4
gpt4 key购买 nike

下面的代码会导致C4624 .但是你可以看到 D 不是 B 的子类。为什么仍然得到这个警告?谢谢!

class B {
// Uncomment the following line to resolve.
// public:
~B();
};

class D {B b;}; // C4624 B's destructor not public

有关警告的更多详细信息:

C4624 : '派生类': 无法生成析构函数,因为无法访问基类析构函数

析构函数在基类中不可访问,因此不会为派生类生成。任何在堆栈上创建此类型对象的尝试都会导致编译器错误。

最佳答案

类成员由类的构造函数初始化并由其析构函数销毁。因此,它们的构造函数和析构函数必须可以在这些函数中访问。

在您的示例中,B 有一个私有(private)析构函数,因此 D 的析构函数无法访问,它需要它来销毁其 类型的成员B.

不过,我不知道为什么错误消息指的是“基类”。如果您从发布的代码中得到该错误消息,那么您的编译器可以对其诊断进行一些改进。

关于c++ - 为什么在使用组合而不是继承时出现 C4624(基类析构函数不可访问)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13704835/

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