次のように、名前空間の外側でクラス フレンド関数を定義しようとしています。
namespace A{
class window{
private:
int a;
friend void f(window);
};
}
void f(A::window rhs){
cout << rhs.a << endl;
}
あいまいさがあるというエラーが表示されます。と の 2 つの候補がvoid A::f(A::window);
ありvoid f(A::window)
ます。だから私の質問は:
1) グローバル関数void f(A::window rhs)
をクラス A::window のフレンドにする方法。
編集:(回答を読んだ後)
2) ウィンドウ クラス内のメンバー関数 f をグローバルに修飾する必要があるのはなぜ::f(window)
ですか?
3) この特定のケースで関数 f(A::window) を事前に宣言する必要があるのはなぜですか。一方、クラスが名前空間内で定義されていない場合、関数がフレンドとして宣言された後に関数を宣言しても問題ありません。