c++ - 前向声明和友元函数

标签 c++ namespaces friend

关注这里的问题 如果我像这样省略 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/

相关文章:

c++ - QWebView元素加载进度

Clojure 和 Atom Proto REPL : Do you always have to manually compile functions from a namespace?

c++ - 使模板参数成为模板类的友元

Python - 在命名它包装的函数后调用包装函数

php - PHP 类的版本控制

c++ - 有 friend 看基类吗?

c++ - 如何轻松公开我是 friend 的 C++ 类的所有私有(private)成员?

c++ - 为 C++ WinHttp 设置 useUnsafeHeaderParsing

c++ - Qt:文件名中的非 ASCII 字符被替换为 '?'

c++ - 最近最少使用 (LRU) 缓存