我正在尝试编译类似下面代码段的代码:
class System
{
private:
struct Configuration
{
Configuration(/*params*/);
Configuration(const Configuration&);
Configuration& operator=(const Configuration&);
~Configuration();
/* member variables */
} m_config;
explicit System(const Configuration& cfg);
// Non copyable constructable, non assignable
System(const System&);
System& operator= (const System&);
public:
System();
~System();
}
//Implementation
System::System()
{
m_config = Configuration(/*default params*/);
// ....
}
编译器错误:没有匹配函数来调用'System :: Configuration :: Configuration()'
当我提供嵌套结构的默认构造函数(甚至只是声明而不是其定义)时,错误消失 - 为什么?!
其他详细信息: gcc版本4.4.3(Ubuntu 4.4.3-4ubuntu5)
答案 0 :(得分:7)
首先默认构造m_config然后分配。使用成员列表直接设置其值。
System::System()
: m_config(/*default params*/)
{}