理解编译器错误:“在其封闭类结束之前需要默认成员初始值设定项”
尝试定义一个使用该类作为默认参数值的函数中类成员的默认成员初始值设定项。像 gcc 和 clang 这样的编译器在使用此构造时会遇到困难,而 msvc2017 可以成功处理它。
考虑以下代码片段:
<code class="cpp">class Downloader { public: struct Hints { int32_t numOfMaxEasyHandles = 8; }; static Downloader *Create(const Hints &hints = Hints()); };</code>
提供的代码旨在为 numOfMaxEasyHandles 定义默认值Hints 结构的成员,用作 Create 函数中的默认参数。但是,gcc 和 clang 无法编译此代码,并发出错误:
default member initializer for 'Downloader::Hints::numOfMaxEasyHandles' required before the end of its enclosing class
错误原因
此错误是由于 gcc 和中的错误而发生的clang 涉及类中用作函数中默认参数的默认成员初始值设定项的处理。编译器希望默认成员初始值设定项在类定义本身中定义,而不是在函数体内定义。
可能的解决方法
要解决此问题,有两种潜在的解决方法:
以上是为什么在使用类作为默认参数时,GCC 和 Clang 会抛出'需要默认成员初始值设定项”?的详细内容。更多信息请关注PHP中文网其他相关文章!