【发布时间】:2012-06-11 15:36:00
【问题描述】:
我试图在命名空间之外定义一个类友函数,如下所示:
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(window) 将窗口类中的成员函数 f 限定为全局?
3) 为什么在这种特殊情况下我需要预先声明函数 f(A::window) ,而当类不是在命名空间内定义时,在函数声明后声明函数是可以的朋友。
【问题讨论】:
标签: c++ namespaces friend