[英]Forward declaration and friend function
如果我忽略這樣的命名空間,請遵循以下問題:
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
的朋友聲明。 但是沒有,因此是錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.