2011-12-23 56 views
3

我在想這是可能的,但編譯器抱怨它無法訪問我班的保護/私人成員。我嘗試過移動東西並更改簽名,但找不到可用的組合。如何讓我的班級成爲朋友?

我主要有:

class MyClass 
{ 
public: 
    friend int main(int argc, char** argv); 

private: 
    void test() 
    { 
     cout << "My friend has accessed my member" << endl; 
    } 
}; 

int main(int argc, char** argv) 
{ 
    MyClass mc; 
    mc.test(); 
} 
+1

爲什麼'test()'首先是私人的? – Blender 2011-12-23 17:53:47

+3

@Blender:爲了'測試目的? :P – Xeo 2011-12-23 17:54:41

+0

什麼編譯器..作品在VS2010中找到 – 2011-12-23 17:54:55

回答

2

你有什麼是正確的。

Works in GCC 4.3.4

+0

好吧,是的,它似乎在4.5.1也是如此。我沒有講完整個故事,試圖簡化... – Jaime 2011-12-23 18:00:30

+0

請參閱我的更新http://stackoverflow.com/questions/8619356/how-do-i-make-main-a-friend-of-my-圖書館內部的課程 – Jaime 2011-12-23 18:19:31

1

你可能不應該做你想在這裏做什麼 - 肯定是有一個更好的辦法。也就是說,您可以嘗試在全局名稱空間friend int ::main中聲明友元函數(請注意使用範圍解析運算符::)。

+1

我在我的案例中也試過這個,但沒有奏效。我需要提供更多的細節問題... – Jaime 2011-12-23 18:03:13

+0

請參閱我的更新http://stackoverflow.com/questions/8619356/how-do-i-make-main-a-friend-of-my-class-from -within-A-庫 – Jaime 2011-12-23 18:19:19

相關問題