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