当前位置: 代码迷 >> VC >> 刚学C++,按照书上的打了一串代码。但是总是有异常,求看一下为什么出错
  详细解决方案

刚学C++,按照书上的打了一串代码。但是总是有异常,求看一下为什么出错

热度:411   发布时间:2016-05-05 00:02:10.0
刚学C++,按照书上的打了一串代码。但是总是有错误,求看一下为什么出错。
#include<Windows.h>

int WINAPI wWinMain(HINSTANCE hlnstance,HINSTANCE hPrevlnstance,LPWSTR cmdLine ,int nShow)
{
UNREFERENCED_PARAMETER(hPrevlnstance);
UNREFERENCED_PARAMETER(cmdLine);
WNDCLASSEX wndClass={0};
wndClass.cbSize=sizeof(WNDCLASSEX);
wndClass.style=CS_HREDRAW|CS_VREDRAW;
wndClass.lpfnWndProc=WndProc;//就是这儿出错,提示我未定义时标符
wndClass.hInstance=hlnstance;
wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);
wndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wndClass.lpszClassName=NULL;
wndClass.lpszMenuName="DX11BOOKWindowsClass";

if(!RegisterClass(&wndClass))//"WNDCLASSEX *" 类型的实参与 "const WNDCLASSA *" 类型的形参不兼容
return -1;
RECT rc={0,0,640,480};
AdjustWindowRect(&rc,WS_OVERLAPPEDWINDOW,false);

HWND hwnd=CreateWindow("DX11BOOKWindowsClass","BlankWin32Window",WS_OVERLAPPEDWINDOW,0,0,rc.right-rc.left,rc.bottom-rc.top,NULL,NULL,hlnstance,NULL);
if(!hwnd)
return-1;
ShowWindow(hwnd,nShow);
return 0;
}


然后第一个错误,我看网上的说把
wndClass.lpfnWndProc=WndProc;改为:wndClass.lpfnWndProc=(WNDPROC)WndProc;PS:还是一样提示有错。
网上的另一种说法:
不改,在上面添加一排LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);PS:就不报错了。
大家能解释一下这是怎么回事吗?

第二的‘&’符号,完全不知道为什么了。也不好百度。
------解决思路----------------------
未声明就使用造成的。
------解决思路----------------------
我以前也看过类似的书,敲过这种代码,这些东西是比较偏底层的东西了,建议知道大概逻辑就行了,不需要深究,更不需要尝试去调试和运行。

至于第一个为什么出错,因为WndProc没有定义,所以会报错,相当于一个变量,你没有定义就直接使用,当然不行。这其实是一个窗口消息处理函数。

‘&’符号你不知道什么意思,显然一些c基础你都还没有,直接去深究这些代码就更没意义了。
如果想理解一下,桌面窗口程序的底层运行机理,可以百度MFC了解了解。

建议你花个2天时间学习下c的基础,再慢慢渗透c++面向对象等的一些概念,然后再根据需要学习东西。



------解决思路----------------------
指针和引用的内容,必须搞熟悉,不要心急,贪快。
------解决思路----------------------
引用:
Quote: 引用:

未声明就使用造成的。

谢谢,知道了是未声明。我说的第二种方法算是声明了嘛?

WndProc 要是一个函数。
函数使用前要先声明。
就象二楼所说应该把基础的东西打牢了。 C语言是入门也是相当简单的。把C学会了,再学C++。
MFC不是非一定要学的。
  相关解决方案