У меня есть класс в пространстве имен, и тот класс содержит закрытую функцию. И существует глобальная функция. Я хочу, чтобы та глобальная функция была другом моего класса, который является в пространстве имен. Но когда я делаю его как друг, компилятор думает, что функция не глобальна, и это в том пространстве имен самом. Таким образом, если я пытаюсь получить доступ к функции члена парламента, не занимающего официального поста с глобальной функцией, она не работает, тогда как, если я определяю функцию с тем же именем в том пространстве имен самом, она работает. Ниже код, который Вы видите.
#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();
namespace Nayan
{
class CA
{
private:
static void funCA();
friend void fun();
friend void ::fun();
};
void CA::funCA()
{
std::cout<<"CA::funCA"<<std::endl;
}
void fun()
{
Nayan::CA::funCA();
}
}
void fun()
{
Nayan::CA::funCA(); //Can access private member
}
Функция fun() находится в глобальном пространстве имен. Вам нужен прототип:
void fun();
namespace Nayan
{
class CA
{
private:
static void funCA() {}
friend void ::fun();
};
}
void fun()
{
Nayan::CA::funCA();
}