我试图在命名空间之外定义一个类朋友函数,如下所示:
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)为什么我需要通过 do 将窗口类中的成员函数 f 限定为全局::f(window)
?
3)为什么我需要在这种特殊情况下预先声明函数 f(A::window) ,而当类不是在命名空间内定义时,在函数被声明为友元之后声明函数是可以的。