friend auf globale Funktion
-
Hallo, ich habe ein seltsames Problem!
Ich habe eine Klasse mit einer friend Deklaration auf eine globale Funktion:
// Count.h namespace nsd { class Count { private: friend INT_PTR CALLBACK DialogProcHelper(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); INT_PTR dialogProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam); }; } // Count.cpp namespace nsd { static Count* g_Count = NULL; } INT_PTR CALLBACK DialogProcHelper(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) { return nsd::g_Count->dialogProc(hDlg, msg, wParam, lParam); // A }Das bringt mir einen Compiler Fehler in Zeile A:
error C2248: 'nsd::Count::dialogProc' : cannot access private member declared in class 'nsd::Count'
Wieso? Ich habe doch DialogProcHelper extra als friend deklariert?

-
AFaik geht der Compiler davon aus, daß die friend-Funktion im selben Namensraum liegt wie die Klasse, solange du ihn nicht vom Gegenteil überzeugen kannst. Das heißt entweder du packst deine Funktion auch mit in den Namensraum oder du gibst bei der friend-Definition den kompletten Namen an (zumindest Ideone benötigt für letzteres noch eine Forward-Deklaration der Funktion).