源文件中的嵌套类定义

Sam*_*rsa 32 c++ member inner-classes

如果我有这样的嵌套类:

  class MyClass
  {
    class NestedClass
    {
    public:
      // nested class members AND definitions here
    };

    // main class members here
  };
Run Code Online (Sandbox Code Playgroud)

目前,定义MyClass是在CPP文件中,但定义NestedClass是在头文件中,也就是说,我不能在CPP文件中声明函数/构造函数.

所以我的问题是,如何定义NestedClasscpp文件中的函数?如果我不能,那是什么原因(如果是这种情况,我对于为什么会发生这种情况有一个模糊的想法,但我想要一个很好的解释)?结构怎么样?

sje*_*397 53

您可以.如果你的内部类有一个方法,如:

  class MyClass   {
    class NestedClass
    {
    public:
      void someMethod();
    };

    // main class members here
  };
Run Code Online (Sandbox Code Playgroud)

...然后您可以在.cpp文件中定义它,如下所示:

void MyClass::NestedClass::someMethod() {
   // blah
}
Run Code Online (Sandbox Code Playgroud)

结构几乎与C++中的类相同 - 只是默认为'public'来访问它们.他们在所有其他方面都像对待类一样对待.

可以(如评论中所述)只声明一个内部类,例如:

class MyClass   {
    class NestedClass;
    // blah
};
Run Code Online (Sandbox Code Playgroud)

..然后在实现文件中定义它:

class MyClass::NestedClass {
  // etc.
};
Run Code Online (Sandbox Code Playgroud)