编译后出现大量错误信息怎么办
编号:QA000281
建立日期: 1998年12月30日 最后修改日期:1998年12月30日
所属类别:
Fan Zhixiang:
我有一段源程序如下:compile以后,错误百出,妨诸位替我分析分析,不胜感激.
(程序略)
错误信息如下:
Info :Compiling C:\user\x.cpp
Error: x.cpp(20,26):Call to undefined function 'loadCursor'
Error: x.cpp(20,15):Cannot convert 'int' to 'HICON__ *'
Error: x.cpp(23,21):Cannot convert 'void *' to 'HBRUSH__ *'
Error: x.cpp(30,6):Undefined symbol 'hWnd'
Error: x.cpp(32,13):Cannot convert 'void *' to 'HINSTANCE__ *'
Error: x.cpp(32,13):Type mismatch in parameter 'hInstance' in call to
'__stdcall CreateWindowExA(unsigned long,const char *,const char
*,unsigned long,int,int,int,int,HWND__ *,HMENU__ *,HINSTANCE__ *,void
*)'
Error: x.cpp(33,32):Undefined symbol 'SHOW_MAXIMIZED'
Warn : x.cpp(40,2):'hwnd' is declared but never used
Warn : x.cpp(40,2):Parameter 'lpszCmdLine' is never used
Warn : x.cpp(40,2):Parameter 'nCmdShow' is never used
Error: x.cpp(54,20):Illegal structure operation
Error: x.cpp(54,41):Undefined symbol 'tmExternalLeading'
Error: x.cpp(56,40):Undefined symbol 'poshorzscoll'
Error: x.cpp(57,40):Undefined symbol 'posvertscoll'
Error: x.cpp(58,16):Call to undefined function 'SetSCrollRange'
Error: x.cpp(135,73):Function call missing )
Error: x.cpp(142,7):Misplaced break
Error: x.cpp(143,5):Case outside of switch
Error: x.cpp(143,17):Expression syntax
Error: x.cpp(145,7):Misplaced break
Error: x.cpp(146,8):Default outside of switch
Warn : x.cpp(148,2):'slength' is declared but never used
Error: x.cpp(149,7):Declaration terminated incorrectly
Error: x.cpp(150,2):Unexpected }
我的操作系统:win95
工具:bc5.02
回答:
我不可能一一为你分析错误,因为我没有那么多的时间。我只能告诉你一些消除错误的原则,你自己来逐一分析,这样你才能学会编程。
首先,用不着见到错误就六神无主。错误信息虽多,但没什么了不起。编译错误就象是拼写检查的结果。
下面,看看有多少条错误信息(Error)和警告(Warn)。当然先分析错误信息,有些警告是由于错误信息产生的。如果你对某条错误信息的含义不了解,可以选择该条错误信息,然后按F1键,在帮助文件中肯定会有更详细的介绍。
绝大多数编译错误实际上都是拼写错误。看看你的程序吧。凡是undefined错误都是拼写错误。象把LoadCursor写成loadCursor,hWnd写成hwnd,别忘了C/C++是区分大小写的!还有把SW_SHOWMAXIMIZED写成SHOW_MAXIMIZED。有时候记忆出了错误,查查手册或帮助就行了。
接下来,要查“(”、“)”、“{”、“}”等各种括号的匹配问题。Function call missing )、Misplaced break、Case outside of switch这些信息都说明你的程序中存在匹配问题。你的程序中有一行
TextOut(hdc,-charwt*(poshorzscroll,charht*(t-posvertscroll),szbuffer,i);}
显然少了一个“)”括号。一般在检查这种错误时,必须找到第一个出现此类错误的地方,修改后一般立即重新编译,因为一个匹配错误可能引发几十个错误,继续查后面的错误意义不大。
剩下的Cannot convert、Type mismatch错误是数据类型转换错误。这其实不一定是错误,因为C++对参数类型检查的要严格一些,所以有时要尽可能使用强制类型转换来避免这种错误。比如你的
wcAPP.hbrBackground=GetStockObject(WHITE_BRUSH);
导致Cannot convert 'void *' to 'HBRUSH__ *'错误,你可以试着在相关参数前加上(HBRUSH),改成
wcAPP.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
对于这类转换,不同的C++系统可能不同,所以有的时候不写也可以,但我建议要强制转换,这样麻烦少。同时要注意变量类型是否可以强制转换,比如有的参数为指针类型,要在普通变量前加“&”操作符。这要参考有关函数的帮助。
此问题由李海回答。
| |
|
|
| |
|
|