嵌套类初始化列表问题

时间:2011-02-28 08:37:09

标签: c++

//header file
class Foo
{
   public:
   struct FooBar {
      bool ok;
      string msg;
   };
};

// .cpp file
Foo::FooBar::FooBar():ok(false), msg("hello")
{}

尝试编译时,我得到:

错误:隐式声明的'Foo :: FooBar :: FooBar()'的定义

愚蠢,简单的范围相关的错误我敢肯定,但我似乎无法发现它是什么......

3 个答案:

答案 0 :(得分:5)

您正在尝试实现未声明的构造函数。声明如下:

//header file
class Foo
{
   public:
   struct FooBar {
      FooBar();
      bool ok;
      string msg;
   };
};

// .cpp file
Foo::FooBar::FooBar():ok(false), msg("hello")
{}

答案 1 :(得分:1)

您需要声明构造函数,即

class Foo
{
   public:
   struct FooBar {
      FooBar(); // <-- needed
      bool ok;
      string msg;
   };
};

答案 2 :(得分:1)

当省略类的构造函数声明时,编译器会创建隐式构造函数定义。在这种情况下,您已经定义了默认构造函数,但没有声明它,因此编译器对发生的事情感到困惑。因此,它抱怨你定义一个隐式定义的默认构造函数。

解决方案是声明默认构造函数,以便它知道使用默认构造函数定义。