Как это:
// foo.hpp
class Foo
{
public:
class Inner;
Foo();
void bar();
Inner zoo();
};
// foo_inner.hpp
#include "foo.hpp"
class Foo::Inner
{
void func();
};
Затем в реализации:
#include "foo.hpp"
#include "foo_inner.hpp"
void Foo::bar() { /* ... */ }
void Foo::Inner::func() { /* ... */ }
Обратите внимание, что вы можете использовать неполный тип Foo::Inner
внутри определения класса Foo
(т. Е. В foo.hpp
) с учетом обычных ограничений для неполных типов, например, Inner
может отображаться как тип возвращаемого значения функции, аргумент функции, ссылка или указатель. Пока реализации функций-членов для класса Foo
могут видеть определение класса Foo::Inner
(включая foo_inner.hpp
), все в порядке.