Tengo una clase dentro de un espacio de nombres y esa clase contiene una función privada. Y hay una función global. Quiero que esa función global sea el amigo de mi clase que está dentro del espacio de nombres. Pero cuando lo hago como amigo, el compilador piensa que la función no es global y está dentro de ese espacio de nombres. Entonces, si intento acceder a la función de miembro privado con función global, no funciona, mientras que si defino una función con el mismo nombre en ese espacio de nombres, funciona. A continuación está el código que puedes ver.La función de amigo no puede acceder a la función privada si la clase está bajo un espacio de nombres
#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;
}
también traté de hacer amigo como amigo vacío :: divertido(); Y tampoco ayuda.
Creo que lo que compilarnayan pretende es declarar fun() fuera del espacio de nombres Nayan. –
@Vitor Py: Ya lo sé, pero no está de más mostrar la diferencia explícitamente. Cada amigo se refiere a algo diferente. –