2016-07-05 11 views
2

ich eine dynamische Bibliothek erstellen müssen:Freund Definition funktioniert nicht mit gcc4.9

mylib.h

class FriendClass; 

namespace my_namespace 
{ 

class MyLib 
{ 
    friend class FriendClass; 

public: 
    MyLib(); 

    /* public functions */ 

private: 
    void function_for_friend_class(); 
}; 

} // namespace my_namespace 

Und es verwenden hier

friend_function.h

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

Mit gcc3.4 kompiliert, aber gcc4.9 beschwert sich, dass function_for_friend_class privat ist. Was mache ich falsch?

+2

Versuchen entweder 'Freund Klasse :: FriendClass;'. oder 'Freund FriendClass;' –

+0

Aber schaut es nicht in globalen Namespace, wenn es nicht in aktuellen finden? – user1289

+0

Ja, es hat funktioniert .. – user1289

Antwort

0

Verwenden Sie friend class ::FriendClass; Dadurch weisen Sie den Compiler an, im globalen Namespace der Definition class FriendClass zu suchen, nicht im aktuellen Namespace.

auch verwenden:

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

Der Punkt ist, warum der Name im globalen Bereich kann nicht gefunden werden? – songyuanyao

+0

Da Sie "Freundschaftsklasse FriendClass" schreiben, weisen Sie den Compiler an, nur im aktuellen Namespace zu suchen, nicht im globalen Namespace. –

+0

[Unqualified name lookup] (http://en.cppreference.com/w/cpp/language/unqualified_lookup#Namespace_scope) sollte den Namen finden, wenn Sie den Bereich nicht explizit angeben. Das Problem ist, warum es hier nicht funktioniert. – songyuanyao