Почему у меня не может быть определенных функций закрытого члена? - PullRequest
0 голосов
/ 24 января 2020

Учитывая класс, почему мы можем реализовать определенные закрытые функции-члены, но не другие закрытые функции-члены? Например, см. Ниже:

header file:
class A
{
    ....
    struct B
    {
    ....
    }
    int f(); 
    B* g();
}

cpp file:
int A::f(){...} // will compile
B*  A::g(){...} // will not compile!

Ошибка «Неизвестное имя типа« B »», но мой фактический код содержит некоторые дополнительные сведения.

Ответы [ 2 ]

4 голосов
/ 24 января 2020
B*  A::g(){...}

B не виден снаружи A.

A::B*  A::g(){...}

Это не имеет ничего общего с частными участниками. Поскольку B объявлено внутри A, оно не находится в глобальной области видимости, поэтому вам необходимо указать, на что B вы ссылаетесь.

2 голосов
/ 24 января 2020

В качестве альтернативы другому ответу вы можете использовать конечные типы возврата

auto A::g() -> B* {...}

До A::g() вы должны использовать A::B. После A::g() вы можете просто использовать B.

...