У меня есть два вопроса об этом коде ниже:
namespace A { class window; }
void f(A::window);
namespace A
{
class window
{
private:
int a;
friend void ::f(window);
};
}
void f(A::window rhs)
{
std::cout << rhs.a << std::endl;
}
1) почему мне нужно квалифицировать функцию-член f внутри оконного класса как глобальную, выполнив ::f(window) ?
2) почему мне нужно предварительно объявить функцию f(A::window) в этом конкретном случае, тогда как, когда класс не определен внутри пространства имен, можно объявить функцию после того, как функция объявлена другом .