首页 >后端开发 >C++ >为什么我会收到'需要默认成员初始值设定项”错误,我该怎么办?

为什么我会收到'需要默认成员初始值设定项”错误,我该怎么办?

Patricia Arquette
Patricia Arquette原创
2024-10-29 19:03:291107浏览

 Why Do I Get a

了解编译器错误消息:“在其封闭类结束之前需要默认成员初始值设定项”

当遇到编译器错误消息时“在其封闭类结束之前需要默认成员初始值设定项”,因此必须深入研究代码并了解根本问题。如果类定义中缺少类成员的默认成员初始值设定项,则会出现此错误。

编译器行为:三个故事

有问题的代码,以 Downloader 类及其 Hints 嵌套结构为特色,在编译器之间表现出不同的行为。虽然 MSVC2017 可以成功编译它,但 GCC8.2 和 Clang7.0 会引发上述错误。这种差异源于 Hints 结构体缺少默认成员初始值设定项。

揭示根本原因

取消注释 Hints 结构体中的 Hints(){} 行解决了所有三个编译器的问题。该行本质上提供了一个空构造函数,它满足默认成员初始值设定项的要求。但是,取消注释 Hints() = default;使用 Clang 和 GCC 会导致编译错误,但使用 MSVC 则不会。

Bug 一览

此行为可归因于 Clang 和 GCC 中的错误。错误报告 (https://bugs.llvm.org/show_bug.cgi?id=41303) 演示了类似的问题,并显示了类似的错误消息。报告表明,问题在于某些上下文中默认成员初始值设定项的延迟解析,导致编译器误解代码。

结论

避免此类编译器错误,确保所有具有默认值的类成员都在类定义中定义了显式默认成员初始值设定项至关重要。这种做法可确保不同编译器之间的编译行为一致,并有助于防止代码开发过程中出现意外错误。

以上是为什么我会收到'需要默认成员初始值设定项”错误,我该怎么办?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn