在这里提出问题 如果我省略这样的命名空间:
void f(window);
class window{
private:
int a;
friend void ::f(window);
};
void f(window rhs){
std::cout << rhs.a << std::endl;
}
我的行为很奇怪:
friend void f(window);
编译时没有f(窗口)的前向声明,但是
friend void ::f(window);
不:
error C2039: 'f' : is not a member of '`global namespace''
有人可以解释一下它的原因吗?如果我们仍然在全局命名空间中,为什么::这会产生差异......
感谢?
答案 0 :(得分:1)
如果你没有在朋友声明中限定f
,它的行为就像一个普通的声明,并在周围的命名空间中声明f
(在你的情况下为全局)。
但是,如果您明确将其限定为::f
,则它不再是f
的声明,而只是一个想要引用已声明的f
的朋友声明。但没有,因此错误。