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