为什么这个内部(嵌套)结构需要默认的ctor?

时间:2011-02-09 12:20:26

标签: c++

我正在尝试编译类似下面代码段的代码:

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)

1 个答案:

答案 0 :(得分:7)

首先默认构造m_config然后分配。使用成员列表直接设置其值。

System::System()
  : m_config(/*default params*/)
{}