即使声明为全局,全局友元函数也无法访问私有范围

时间:2012-06-09 20:42:11

标签: c++ class function

我确信这是一件非常容易让我忽略的事情,但是我正在撕掉这条错误信息。我很少使用朋友的功能。

error: 'LRESULT Window_Proc(HWND, UINT, WPARAM, LPARAM)' should have been declared inside '::'

这是我的定义:

namespace rayc 
{
    class win32_window: public window {
    public:
        win32_window();
        ~win32_window();

        void show();
        void hide();
        void pump_message();

    private:
        friend LRESULT CALLBACK ::Window_Proc(HWND, UINT, WPARAM, LPARAM);

        void set_closed(bool);

        HWND hWin;
    };
}

我不太明白这个错误信息,它被定义为属于全局范围,不是吗?!

使用MinGW-64 TDM进行编译。

1 个答案:

答案 0 :(得分:3)

  

我不太明白这个错误信息,它被定义为属于全局范围,不是吗?!

除非您在friend声明之前在全局名称空间中包含前向声明,否则不是。如果friend声明引入了新符号,则此符号位于包含它的的封闭名称空间

尝试添加

LRESULT CALLBACK Window_Proc(HWND, UINT, WPARAM, LPARAM);

在全局命名空间中,在声明之前。