a.
class snap {
friend clasp;
...
};
class clasp { ... }; b.
class cuff {
public:
void snip(muff &) { ... }
...
};
class muff {
friend void cuff::snip(muff &};
...
}; c.
class muff {
friend void cuff::snip(muff &);
};
class cuff {
public:
void snip(muff &) { ... }
}; 
friend class clasp;
b. 这需要一个前向声明,以便编译器能够解释void snip (muff&):
snip(muff &): class muff; // forward declaration class cuff { public: void snip(muff &) { ... } ... }; class muff { friend void cuff::snip(muff &); ... };c. 首先,cuff类声明应在muff类之前,以便编译器可以理解cuff::snip()。其次,编译器需要muff的一个前向声明,以便可以理解snip(muff &)。class muff; // forward declaration class cuff { public: void snip(muff &) { ... } ... }; class muff { friend void cuff::snip(muuff &); ... };