【问题标题】:c2447 error learning to create a win32 windowc2447错误学习创建win32窗口
【发布时间】:2015-02-08 10:41:54
【问题描述】:

我已尝试多次并从几乎相同的视频中复制此代码,目前有些不同,因为我一直在胡闹而没有出现新的错误,但我一直在尝试自己解决这个问题断断续续的几天。无论如何,它的 c2447 缺少 { (旧式格式?)在谷歌搜索后似乎很容易解决,但我被卡住并感到沮丧。它也应该是一个win32窗口

#include <windows.h>

LRESULT CALLBACK
MainWindowCallback(HWND Window
UINT Message,
                              WPARAM WParam,
                              LPARAM LParam);
{
            LRESULT Result = 0;

            switch(Message)
            {
                case WM_SIZE:
                {
                OutputDebugStringA("WM_SIZE\n")
                } break;

                case WM_DESTROY:
                {
                OutputDebugStringA("WM_DESTROY\n")
                } break;

                case WM_ClOSE:
                {
                OutputDebugStringA("WM_CLOSE\n")
                } break;

                case WM_ACTIVATEAPP:
                {
                OutputDebugStringA("WM_ACTIVATEAPP\n")
                } break;

                default:
                {
                Result = ;
                } break;
            }
            return(Result);
}

int CALLBACK 
    WinMain(HINSTANCE Instance,
                HINSTANCE PrevInstance,
                LPSTR CommandLine,
                int ShowCode)



{
    WNDCLASS WindowClass = {};

WindowClass.style = CS_OWNDC|CS_HREDRAW|CS_VREDRAW;
WindowClass.lpfnWndProc = MainWindowCallback;
WindowClass.hInstance = Instance ;
  // WindowClass.hIcon;
WindowClass.lpszClassName = "RavelWindowClass";

    if(RegisterClass(&WindowClass));
{
    HWND WindowHandle =
        CreateWindowEx(0,
                                   WindowClass.lpszClassName,
                                    "Ravel",
                                    WS_OVERLAPPEDWINDOW|WS_VISIBLE,
                                    CW_USEDEFAULT,
                                    CW_USEDEFAULT,
                                    CW_USEDEFAULT,
                                    CW_USEDEFAULT,
                                    0,
                                    0,
                                    Instance,
                                    0);

                if(WindowHandle)
                {
                    for(;;)
                    {
                        MSG Message;
                        BOOL MessageResult = GetMessage(&Message, 0, 0, 0);
                        if(MessageResult > 0)
                        {
                            TranslateMessage(&Message);
                            DispatchMessage(&Message);

                        }
                        else
                        {
                            break;
                        }
                    }
                }
}

    return(0);
}

ps 在我的作者中并不像我在网站上遇到的问题那样马虎。 谢谢

【问题讨论】:

  • HWND Window 后面的逗号太少。
  • 这是什么Result = ;
  • 逗号实际上在我的代码中,这很奇怪。我填写了结果,我仍然得到 C2447。
  • @StevenGosse 你能给我们至少完整的错误信息吗?我的编译器没有像 C2447 这样的错误。是吗?
  • 原因是你这里有一个尾随;LPARAM LParam);,试着去掉它,看看它是否有效。

标签: c++ compiler-errors


【解决方案1】:

您的代码有几个错误。首先编译器错误c2447告诉我们:

编译器在全局范围内遇到了意外的开括号。在 大多数情况下,这是由格式错误的函数头引起的, 错位的声明,或杂散的分号。为了解决这个问题, 验证左大括号是否遵循格式正确的函数头, 并且前面没有声明或杂散分号。

您收到此错误是因为分号结束了您的函数头,请注意您还缺少两个第一个参数之间的,

LRESULT CALLBACK
MainWindowCallback(HWND Window <-- missing comma        
                   UINT Message, 
                   WPARAM WParam, 
                   LPARAM LParam); <-- terminates the function header

请注意,c++ 区分大小写,因此 WM_ClOSE 与您应该使用的 WM_CLOSE 不同。换句话说,您正在尝试使用未定义的常量并需要更改常量名称:

case WM_ClOSE: <-- this is an undefined constant, should be WM_CLOSE
{
  OutputDebugStringA("WM_CLOSE\n")
} break;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2011-07-01
    • 1970-01-01
    • 2014-04-16
    • 2011-04-27
    • 2014-03-01
    • 1970-01-01
    相关资源
    最近更新 更多