我在名稱空間內有一個類,並且該類包含一個私有函數。還有一個全球性的功能。我希望這個全局函數成爲我的類的名字空間內的朋友。但是,當我將它作爲朋友時,編譯器認爲該函數不是全局的,而是它在該名稱空間內。因此,如果我嘗試訪問具有全局函數的私有成員函數,它不起作用,而如果我在該名稱空間本身中定義一個具有相同名稱的函數,它將起作用。以下是您可以看到的代碼。如果類位於命名空間下,朋友函數無法訪問私有函數
#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;
}
我也試圖讓朋友爲 朋友無效::樂趣(); 而且它也沒有幫助。
我相信compilernayan打算是聲明樂趣()的拿煙命名空間之外。 – 2010-07-12 17:17:13
@Vitor Py:Ya我知道,但它並沒有傷害顯示差異明確。每個朋友都提到不同的東西。 – 2010-07-12 17:18:04