Определение вложенного класса в исходном файле - PullRequest
32 голосов
/ 19 декабря 2010

Если у меня есть вложенный класс, например, так:

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

    // main class members here
  };

В настоящее время определения MyClass находятся в файле CPP, а определения NestedClass находятся в файле заголовка, чтоЯ не могу объявить функции / конструкторы в файле CPP.

Итак, мой вопрос: как мне определить функции NestedClass в файле cpp?Если я не могу, в чем причина (и если это так, у меня есть смутное представление о том, почему это происходит, но я хотел бы получить хорошее объяснение)?А как насчет структур?

1 Ответ

52 голосов
/ 19 декабря 2010

Можно. Если у вашего внутреннего класса есть метод вроде:

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

    // main class members here
  };

... тогда вы можете определить его в файле .cpp следующим образом:

void MyClass::NestedClass::someMethod() {
   // blah
}

Структуры - это почти то же самое, что и классы в C ++ - по умолчанию они имеют значение public для доступа. В остальном к ним относятся как к классам.

Вы можете (как отмечено в комментариях) просто объявить внутренний класс, например ::

class MyClass   {
    class NestedClass;
    // blah
};

.. и затем определите его в файле реализации:

class MyClass::NestedClass {
  // etc.
};
...