C++ 嵌套类初始化列表问题

C++ 嵌套类初始化列表问题,c++,C++,尝试编译时,我得到: 错误:隐式声明的“Foo::FooBar::FooBar()”的定义。 我敢肯定,这是一个愚蠢的、简单的、与作用域相关的错误,但我似乎看不出它是什么…您试图实现一个未声明的构造函数。声明如下: //header file class Foo { public: struct FooBar { bool ok; string msg; }; }; // .cpp file Foo::FooBar::FooBar():ok(false

尝试编译时,我得到:

错误:隐式声明的“Foo::FooBar::FooBar()”的定义。


我敢肯定,这是一个愚蠢的、简单的、与作用域相关的错误,但我似乎看不出它是什么…

您试图实现一个未声明的构造函数。声明如下:

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

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

您需要声明构造函数,即

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

// .cpp file
Foo::FooBar::FooBar():ok(false), msg("hello")
{}
class-Foo
{
公众:
结构FooBar{

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

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

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