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