[英]Friend function cannot access private function if class is under a namespace
我在命名空間內有一個類,該類包含一個私有函數。 並且有一個全球功能。 我希望這個全局函數成為我的類的朋友,它位於命名空間內。 但是當我把它作為朋友時,編譯器認為該函數不是全局的,而是在該命名空間本身內部。 因此,如果我嘗試使用全局函數訪問私有成員函數,它就不起作用,而如果我在該命名空間中定義一個具有相同名稱的函數,它就可以工作。 以下是您可以看到的代碼。
#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(); 它也沒有幫助。
您需要使用全局范圍運算符::
。
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();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.