int Outer::func(Outer::Inner& inn, Outer::Inner::In_inner& in_inn)
Да. Вы правильно написали это. Вы должны добавить Outer::
, если определяете его вне класса.
Мне немного странно, что список параметров немного отличается от объявления
Это нормально. Функция определяется вне класса. Ты больше не в рамках класса. Следовательно, это выглядит немного иначе.
Но если вы не хотите, чтобы он выглядел по-другому, вы также можете написать Outer::
в объявлении, как показано ниже:
class Outer
{
public:
//...
int func(Outer::Inner& inn, Outer::Inner::In_inner& in_inn);
};
Это нормально, и будет работать, потому что Outer
- это имя для инъекции, оно также доступно внутри класса.
struct A
{
struct B {
struct C {};
};
B b1; //okay - as usual
A::B b2; //this is also okay - not so usual though
B::C c1; //okay - as usual
A::B::C c2; //this is also okay - not so usual though
A::A::A::A::A::A *pA; //this is very very unsual. But it is also okay!
};
Последняя строка в порядке, потому что имя A
вводится внутри определения класса A
. Следовательно, он становится рекурсивно доступным.
Смотри, он отлично компилируется