定义友元函数的代码与声明友元的代码没有先后顺序,例如如下代码:
class MyClass{
friend void f();
};
void f() {
}
和
void f() {
}
class MyClass{
friend void f();
};
以上两段代码等价。需要注意的是,如果在声明友元的类的内部使用该友元函数,必须要在类外部声明该函数,如果函数定义在类内部,此时也需要在类外部对该函数进行声明。
class MyClass{
friend void f() {};
void myFunc() {
f();
}
};
其中,f()是MyClass的友元,并且在MyClass内部定义。MyClass的成员函数myFunc()调用了f(),此时,程序会报错,报错的信息为 error C3861: “f”: 找不到标识符。此时需要在类外部对函数f()进行声明,
void f();
而且该声明的代码必须在类MyClass定义的代码之前。