在成员函数外部封闭类的定义中需要默认成员初始值设定项

Default member initializer needed within definition of enclosing class outside of member functions

本文关键字:成员 默认 外部 函数 定义      更新时间:2023-10-16

非常简单的示例,具有嵌套结构和具有默认值的方法

struct outer {
struct inner
{
int x{0};
};
void foo(inner = inner())
{}
};

使用 clang 和 gcc8 进行编译都返回此错误

main.cpp:7:22: error: default member initializer for 'x' needed within definition of enclosing class 'outer' outside of member functions
void foo(inner = inner())
^
main.cpp:4:13: note: default member initializer declared here
int x{0};
^
1 error generated.

示例:http://coliru.stacked-crooked.com/a/f28eb47735bfa4e5

我已经读过这个和这个,但仍然不知道发生了什么?

我不太确定为什么不允许这样做。 我可以使用重载产生一种解决方法:

void foo(inner)
{}
void foo() {
foo(inner());
}

如果有人可以说出重载函数和提供默认值之间的区别(从类型系统的角度来看(,则该信息可能包含语言不允许问题中指定的模式的原因