在Visual Studio 2019中编写DirectX代码出现'{'和';'错误求助
解决Visual Studio 2019中的语法错误问题
嘿,我一眼就看到你代码里的问题啦!咱们来逐个修复:
1. 变量拼写错误
你的WinMain函数参数里把hInstance拼成了hIstance(注意是字母n不是大写I),而且后面给wc.hInstance赋值时也用了这个错误的拼写。这会导致编译器识别不了这个变量,虽然你提到的是{和;的错误,但这个拼写问题也是需要先修正的。
2. while循环的括号优先级与匹配问题
这才是导致你看到的语法错误的核心原因!你原来的循环条件写法有问题:
while( (gResult = GetMessage( &msg,nullptr,0,0 ) > 0 )
这里有两个问题:
- 运算符优先级:
>的优先级比=高,所以编译器会先计算GetMessage(...) > 0,把得到的布尔值赋值给gResult,这不是你想要的逻辑。 - 括号不匹配:你少了一个闭合括号,导致编译器无法正确解析代码结构,进而抛出看似不相关的
{和;错误。
正确的写法应该把gResult = GetMessage(...)整个用括号包裹起来,确保先完成赋值,再判断返回值是否大于0:
while( (gResult = GetMessage( &msg, nullptr, 0, 0 )) > 0 )
修正后的完整代码
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { switch (msg) { case WM_CLOSE: PostQuitMessage( 69 ); break; } return DefWindowProc( hWnd, msg, wParam, lParam ); } int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { const auto pClassName = "directX12"; WNDCLASSEX wc = { 0 }; wc.cbSize = sizeof(wc); wc.style = CS_OWNDC; wc.lpfnWndProc = WndProc; wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; // 修正拼写 wc.hIcon = nullptr; wc.hCursor = nullptr; wc.hbrBackground = nullptr; wc.lpszMenuName = nullptr; wc.lpszClassName = pClassName; wc.hIconSm = nullptr; RegisterClassEx(&wc); HWND hWnd = CreateWindowEx( 0, pClassName, "Happy Hard Window", WS_CAPTION | WS_MINIMIZEBOX | WS_SYSMENU, 200, 200, 640, 480, nullptr, nullptr, hInstance, nullptr ); ShowWindow(hWnd, SW_SHOW); MSG msg; BOOL gResult; // 修正循环条件的括号 while( (gResult = GetMessage( &msg, nullptr, 0, 0 )) > 0 ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } if(gResult == -1 ) { return -1; } else { return msg.wParam; } }
顺便说一句,编译器有时候在遇到括号不匹配这类语法错误时,给出的错误提示可能会偏离实际问题位置,这是因为解析器被打乱了节奏,以后遇到类似情况可以先检查括号、运算符优先级这类基础语法点哦!
内容的提问来源于stack exchange,提问作者DaFragileTomato
相关产品推荐
相关产品推荐

