名前空間内にクラスがあり、そのクラスにプライベート関数が含まれています。そして、グローバル機能があります。そのグローバル関数を、名前空間内にあるクラスのフレンドにしたい。しかし、私が友人として作ると、コンパイラは関数がグローバルではなく、その名前空間自体の中にあると考えます。そのため、グローバル関数でプライベート メンバー関数にアクセスしようとしても機能しませんが、その名前空間自体で同じ名前の関数を定義すると機能します。以下は、あなたが見ることができるコードです。
#include <iostream>
#include <conio.h>
namespace Nayan
{
class CA
{
private:
static void funCA();
friend void fun();
};
void CA::funCA()
{
std::cout<<"CA::funCA"<<std::endl;
}
void fun()
{
Nayan::CA::funCA();
}
}
void fun()
{
//Nayan::CA::funCA(); //Can't access private member
}
int main()
{
Nayan::fun();
_getch();
return 0;
}
私も友達として友達を作ろうとしました void ::fun(); また、それは役に立ちません。