дружественные функции класс внутри пространства имен

У меня есть два вопроса об этом коде ниже:

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) в этом конкретном случае, тогда как, когда класс не определен внутри пространства имен, можно объявить функцию после того, как функция объявлена ​​другом .

6
задан jleahy 7 March 2013 в 19:51
поделиться