簡體   English   中英

轉發聲明和朋友功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM