前向声明和友元功能
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
的友元声明。但是没有,因此出现错误。
相关文章:
- C++模板来检查友元函数的存在
- 模板类无法识别友元运算符
- 如何使用单独文件中的派生类访问友元函数对象
- 模板化的类和友元函数
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- 如何在嵌套类中正确使用友元声明?
- 友元函数无法访问私有数据成员 (c++)
- 继承和友元函数,从基类访问受保护的成员
- 将子类方法声明为基类的友元
- 如何在友元函数中使用静态成员而不添加前缀 [类名]::
- 在将函数声明为友元时,尖括号的含义是什么?
- 在模板类之外定义友元函数的正确方法是什么?
- 2个模板化类的非模板友元函数未定义引用错误
- 如何启用友元类的友元功能直接在C++中访问其私有成员
- 模板类的友元功能
- 具有自动和友元功能的返回类型匹配
- C++ <<运算符重载,无友元功能
- 一个非成员函数如何实现一个类的友元函数的功能
- 前向声明和友元功能
- 跨多个文件的友元功能