Подтвердить что ты не робот

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

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

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

    // main class members here
  };

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

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

4b9b3361

Ответ 1

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

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

    // main class members here
  };

... тогда вы можете определить его в .cpp файле так:

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

Структуры - это почти то же самое, что и классы на С++ - просто по умолчанию для "public" для их доступа. Они рассматриваются во всех других отношениях, как классы.

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

class MyClass   {
    class NestedClass;
    // blah
};

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

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