【问题标题】:CreateWindow expected an expression and syntax errorCreateWindow 预期表达式和语法错误
【发布时间】:2021-11-16 21:05:23
【问题描述】:
#include<windows.h>

LRESULT CALLBACK window_callback(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    return DefWindowProc(hwnd, uMsg, wParam, lParam);

}
    
int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
    // Create Window Class
    WNDCLASS window_class = {};
    window_class.style = CS_HREDRAW | CS_VREDRAW;
    window_class.lpszClassName = L"Game Window Class";
    window_class.lpfnWndProc = window_callback;

    // Register Class
    RegisterClass(&window_class);


    // Create Window
    CreateWindow(window_class.lpszClassName, "My First Game!", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CW_USEDEFAULT, CW_USEDEFAULT, 1280, 720, 0, 0, hInstance, 0);
        
}

我正在关注 Dan Zaidan 关于如何在 C++ 中制作 pong 的教程,但它已经过时一两年了,这可能是我收到这些错误的原因:

E0029 需要一个表达式

C2059 语法错误:')'

还有几行代码,如果需要我可以包含它们。

编辑 1:添加了 1 个 CW_USEDEFAULT。我仍然收到错误,E0167 和 C2664。 编辑 2:添加了更多代码,希望能让你们更好地理解。

【问题讨论】:

  • CreateWindow takes 11 parameters I only count 10 above 并且这个界面多年来(几十年)都没有改变,我怀疑是错字
  • 好的,现在阅读minimal reproducible example,因为我们需要查看更多代码和完整的未编辑错误消息,
  • 因此,如果您使用UNICODE,则需要将 Unicode 字符串传递给方法,您不能混合使用 W 和 A api,这是未定义的行为。
  • “已经过时一两年了” - 对于 C++,一两年意味着什么都没有。对于 Windows API,一两年的时间没有任何意义。这些东西不会经常改变。这叫做稳定性,很难找到。

标签: c++ winapi createwindow


【解决方案1】:

获取 E0167 和 C2664 意味着您正在尝试使用 ascii 字符串,但您的项目设置设置为 Unicode。当您定义使用“L”前缀的类名字符串时,您可以在代码中看到。到处都这样做。将"My First Game!" 更改为L"My First Game!"

【讨论】:

    猜你喜欢
    • 2021-10-26
    • 2021-08-30
    • 2019-02-20
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    相关资源
    最近更新 更多