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

Я пытаюсь определить функцию друга класса вне пространства имен следующим образом:

namespace A{
class window{
    private:
    int a;
    friend void f(window);
};
}

 void f(A::window rhs){
 cout << rhs.a << endl;
}

Я получаю сообщение об ошибке, говорящее о двусмысленности. и есть два кандидата void A::f(A::window);и void f(A::window). Итак, мой вопрос:

1) Как сделать глобальную функцию void f(A::window rhs)другом класса A::window.

РЕДАКТИРОВАТЬ: (После прочтения ответов)

2) почему мне нужно квалифицировать функцию-член f внутри класса окна как глобальную, выполнив ::f(window)?

3) почему мне нужно предварительно объявить функцию f(A::window) в этом конкретном случае, тогда как, когда класс не определен внутри пространства имен, функция должна быть объявлена ​​после того, как функция объявлена друг.

11
задан jleahy 7 March 2013 в 18:00
поделиться