1
继的问题在这里 如果我忽略这样的命名空间:向前声明和友元函数
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''
有人可以解释它的原因吗?为什么::使这种差异,如果我们在全球命名空间呢......
谢谢?
这比这更复杂一点。不合格的,朋友声明在最近的周围名称空间中声明函数,但它只将名称引入类(但当然,它将使用ADN找到)。 – 2013-04-09 11:34:28
我会接受@ Angew的回答,但我只是用gcc测试了这个代码,并且这两种情况都是在没有前向声明的情况下编译的......任何人都可以解释为什么? – 2013-04-09 12:11:37