2

我确信这是我忽略的非常容易的事情,但我正在为这个错误消息撕裂我的头发。我很少使用朋友功能。

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 编译。

4

1 回答 1

3

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

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

尝试添加

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

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

于 2012-06-09T20:47:23.387 回答