2011-12-23 10 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

+3

@Blender: 'テストの目的のために? :P – Xeo

+0

VS2010で見つかったコンパイラ.. –

答えて

2

あなたが持っている何が正しいです。

Works in GCC 4.3.4

+0

これは、同じように4.5.1でも動作するようです。私は全体の話を簡単にしようとしていませんでした... – Jaime

+0

Plsは私の更新を参照してくださいhttp://stackoverflow.com/questions/8619356/how-do-i-make-main-a-friend-of-my-ライブラリからのクラス – Jaime

1

あなたはおそらく、あなたがここで何をしようとして行うべきではない - より良い方法は確かにあります。つまり、グローバルネームスペースfriend int ::mainのfriend関数を宣言することができます(スコープ解決演算子::の使用に注意してください)。

+1

私は私の場合でもこれを試しましたが、動作しませんでした。私は問題の詳細を提供する必要があります... – Jaime

+0

Plsは私の更新を参照してくださいhttp://stackoverflow.com/questions/8619356/how-do-i-make-main-a-friend-of-my-class-from -within-a-library – Jaime

関連する問題