在成员函数外部封闭类的定义中需要默认成员初始值设定项
Default member initializer needed within definition of enclosing class outside of member functions
非常简单的示例,具有嵌套结构和具有默认值的方法
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());
}
如果有人可以说出重载函数和提供默认值之间的区别(从类型系统的角度来看(,则该信息可能包含语言不允许问题中指定的模式的原因
相关文章:
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 基类中的默认析构函数禁用子类中的移动构造函数(如果有成员)
- C++向量默认为成员参数
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- 强制使用默认构造函数对成员进行未初始化的声明
- 在 C++ 中,默认情况下构造函数为类的数据成员提供的值是多少?
- 用作默认参数的静态成员会导致无法解析的外部
- 为什么在使用指针时不采用类成员的默认值,而不是直接实例化对象时?
- 具有外部定义的默认特殊成员函数
- C++中未初始化成员布尔变量的默认值是多少?
- 两个成员,在Base中默认初始化,可能在Derived中非默认初始化
- 声明成员对象而不调用其默认构造函数
- 将私有数据成员作为默认参数传递给该类的公共方法时出错
- 结构中的默认成员值或默认构造函数参数
- C++11 默认类成员初始化与初始值设定项列表同时
- POD成员默认初始化无括号
- 初始化类成员 - 默认值还是成员初始化列表?
- 具有类成员默认值的 C++11 默认构造函数行为
- 模板成员默认初始化
- 类 POD 成员默认初始化与零初始化与无初始化