I obtain a error: 'func' does not name a type when a member function func of a class B attempts to return a class C:
class A {
    public:
        class B {
            public:
                C func() const {
                    ...
                }
            private:
                friend class A;
        }
        class C {
            public:
                ...
            private:
                friend class A;
        }
    private:
        ...
}
Whereas, if func is a member function of A, then the following does not produce this error: 
class A {
    public:
        class B {
            public:
                ...
            private:
                friend class A;
        }
        C func() const {
            ...
        }
        class C {
            public:
                ...
            private:
                friend class A;
        }
    private:
        ...
}
How can I fix it to make the first version work?
I found a great example here.
Define class C "above" class B, or forward declare it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With