关注这里的问题 如果我像这样省略 namespace :
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(window) 的前向声明,但是
friend void ::f(window);
不会:
error C2039: 'f' : is not a member of '`global namespace''
有人能解释一下原因吗?如果无论如何我们都在全局命名空间中,为什么::会产生这种差异...
谢谢?
最佳答案
如果您没有在友元声明中限定 f
,它的行为也像一个普通声明,并在周围的命名空间(在您的情况下是全局的)中声明 f
。
但是,如果你明确地将它限定为::f
,它就不再是f
的声明,而只是一个想要引用一个已经声明的友元声明f
。但是没有,因此出现错误。
关于c++ - 前向声明和友元函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900651/