如果类位于命名空间下,友元函数无法访问私有函数
我在命名空间中有一个类,该类包含一个私有函数。并且有一个全局函数。我希望该全局函数成为命名空间内的类的友元。但是当我将其作为友元时,编译器认为该函数不是全局的,并且它位于该名称空间本身内部。因此,如果我尝试使用全局函数访问私有成员函数,它就不起作用,而如果我在该命名空间本身中定义一个具有相同名称的函数,它就可以工作。下面是您可以看到的代码。
#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;
}
我也尝试过交朋友 朋友无效::fun(); 而且这也没有帮助。
I have a class inside a namespace and that class contains a private function. And there is a global function. I want that global function to be the friend of my class which is inside the namespace. But when I make it as a friend, the compiler thinks that the function is not global and it is inside that namespace itself. So if I try to access the private member function with global function, it doesn't work, whereas if I define a function with the same name in that namespace itself it works. Below is the code you can see.
#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;
}
I also tried to make friend as
friend void ::fun();
And it also doesn't help.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您需要使用全局范围运算符
::
。You need to use the global scope operator
::
.fun() 函数位于全局命名空间中。你需要一个原型:
The fun() function is in the global namespace. You need a prototype: