Определение вложенного класса в исходном файле

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

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

    // main class members here
  };

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

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

1 ответ

Решение

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

  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.
};
Другие вопросы по тегам