友元声明
如果声明之前未声明的友元函数,该功能为封闭 nonclass 范围导出。
在友元声明的函数视为使用关键字, extern ,则声明。 (有关 extern的更多信息,请参见 静态存储类说明符。)
尽管具有全局范围中的函数声明为 friends 在它们的原型之前,成员函数不能声明为在其完整的类声明之前外观的友元。 下面的代码演示了为什么:
class ForwardDeclared; // Class name is known.
class HasFriends
{
friend int ForwardDeclared::IsAFriend(); // C2039 error expected
};
前面的示例输入类名 ForwardDeclared 范围,但是,完整的声明 (具体而言,声明函数 IsAFriend —的任何部分都不知道。 因此,在类 HasFriends 的 friend 声明会产生一个错误。
若要声明为友元互相的两个类,必须指定整个第二个类作为一级的友元。 此限制的原因是编译器没有足够的信息只声明各个友元函数在第二个类声明的点。
备注
虽然整个第二个类必须是 friends 添加到质数,可以选择质数的哪些功能将为第二个类的友元。