2016-07-05 4 views
2

では動作しません。友達の定義は、私は動的ライブラリを作成する必要がgcc4.9

class FriendClass 
{ 
public: 
    void some_function() 
    { 
     MyLib* my_lib = get_my_lib_somehow(); 
     my_lib->function_for_friend_class(); 
    } 
}; 

gcc3.4はコンパイルされますが、gcc4.9はfunction_for_friend_classがプライベートであると訴えます。私は間違って何をしていますか?

+2

は 'どちらかの友人のクラスを試してみてください:: FriendClass;'。または 'Friend FriendClass;' –

+0

グローバルな名前空間を探していないのですが、現在の名前空間では見つからないでしょうか? – user1289

+0

はい、それは働いた.. – user1289

答えて

0

使用friend class ::FriendClass; これを実行すると、現在の名前空間ではなく、class FriendClassという定義のグローバル名前空間を参照するようにコンパイラに指示します。

も使用します。

my_namespace::MyLib* my_lib = get_my_lib_somehow(); 
+0

ポイントはなぜグローバルスコープ – songyuanyao

+0

"friend class FriendClass;"と書くと、現在の名前空間だけを検索するようにコンパイラに指示します。 –

+0

スコープを明示的に指定しないと、[Unqualified name lookup](http://en.cppreference.com/w/cpp/language/unqualified_lookup#Namespace_scope)に名前が見つかります。問題はここでうまくいかない理由です。 – songyuanyao

関連する問題