vc中的使用技巧和常见错误(7)
6.不同版本的库和编译器的混合使用也能产生问题,因为新版的库里可能包含早先的版本没有的符号和说明。
7.在不同的模块使用内联和非内联的编译选项能够导致LNK2001。如果创建C++库时打开了函数内联(/Ob1或/Ob2),但是在描述该函数的相应头文件里却关闭了函数内联(没有inline关键字),这时将得到该错误信息。为避免该问题的发生,应该在相应的头文件中用inline关键字标志内联函数。
8.不正确的/SUBSYSTEM或/ENTRY设置也能导致LNK2001。
其实,产生LNK2001的原因还有很多,以上的原因只是一部分而已,对初学者来说这些就够理解一阵子了。但是,分析错误原因的目的是为了避免错误的发生。LNK2001错误虽然比较困难,但是只要注意到了上述问题,还是能够避免和予以解决的。
问题8:没有更新sdk而导致的编译出错
如编译《windows核心编程》的附书源码,会出错
Compiling...
ErrorShow.cpp
You are not using the latest Platform SDK header/library
files. This may prevent the project from building correctly.
e:学习电子书windows 核心编程programming_applicatin_for_microsoft_windows_sourcecodecmnhdr.h(212) : error C2065:
'GetWindowLongPtr' : undeclared identifier
e:学习电子书windows 核心编程programming_applicatin_for_microsoft_windows_sourcecodecmnhdr.h(212) : error C2065:
'GWLP_HINSTANCE' : undeclared identifier
e:学习电子书windows 核心编程programming_applicatin_for_microsoft_windows_sourcecode\01-errorshowerrorshow.cpp(83) :
error C2065: 'PCTSTR' : undeclared identifier
e:学习电子书windows 核心编程programming_applicatin_for_microsoft_windows_sourcecode\01-errorshowerrorshow.cpp(83) :
error C2146: syntax error : missing ')' before identifier 'LocalLock'
e:学习电子书windows 核心编程programming_applicatin_for_microsoft_windows_sourcecode\01-errorshowerrorshow.cpp(83) :
error C2059: syntax error : ')'
e:学习电子书windows 核心编程programming_applicatin_for_microsoft_windows_sourcecode\01-errorshowerrorshow.cpp(125) :
error C2664: 'DialogBoxParamA' : cannot convert parameter 4 from 'long (struct HWND__ *,unsigned int,unsigned int,long)' to
'in
t (__stdcall *)(struct HWND__ *,unsigned int,unsigned int,long)'
None of the functions with this name in scope match the target type
Error executing cl.exe.
类似这种很多需要更新sdk的错误
安装好sdk,然后配置路径
TOOL-》option-》direction下
在include下,添加
C:PROGRAM FILESMICROSOFT SDKINCLUDE
在lib下,添加
C:PROGRAM FILESMICROSOFT SDKLIB
这里假设sdk的安装路径是C:PROGRAM FILESMICROSOFT SDK
然后记得把这些添加的路径上移到第一的位置,切记
////////////////////////////////////////////////////////////////
1、fatal error C1010: unexpected end of file while looking for precompiled header directive。<br>
<br>
寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h") <br>
<br>
2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory<br>
<br>
不能打开包含文件“R…….h”:没有这样的文件或目录。<br>
<br>
3、error C2011: 'C……': 'class' type redefinition<br>
<br>
类“C……”重定义。<br>
<br>
4、error C2018: unknown character '0xa3'<br>
<br>
不认识的字符'0xa3'。(一般是汉字或中文标点符号)<br>
<br>
5、error C2057: expected constant expression<br>
<br>
希望是常量表达式。(一般出现在switch语句的case分支中)<br>
<br>
6、error C2065: 'IDD_MYDIALOG' : undeclared identifier<br>
<br>
“IDD_MYDIALOG”:未声明过的标识符。<br>
<br>
7、error C2082: redefinition of formal parameter 'bReset'<br>
<br>
函数参数“bReset”在函数体中重定义。<br>
<br>
8、error C2143: syntax error: missing ':' before '{' <br>
<br>
句法错误:“{”前缺少“;”。<br>
<br>
9、error C2146: syntax error : missing ';' before identifier 'dc'<br>
<br>
句法错误:在“dc”前丢了“;”。<br>
<br>
10、error C2196: case value '69' already used<br>
<br>
值69已经用过。(一般出现在switch语句的case分支中)<br>
<br>
11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'<br>
<br>
成员函数“OnTimer”没有在“CHelloView”中声明。<br>
12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'<br>
<br>
重载的函数“void reset(int)”在类“B”中找不到。<br>
13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention<br>
类B对类A中同名函数f1的重载仅根据返回值或调用约定上的区别。<br>
14、error C2660: 'SetTimer' : function does not take 2 parameters<br>
“SetTimer”函数不传递2个参数。<br>
15、warning C4035: 'f……': no return value<br>
“f……”的return语句没有返回值。<br>
16、warning C4553: '= =' : operator has no effect; did you intend '='?<br>
没有效果的运算符“= =”;是否改为“=”?
17、warning C4700: local variable 'bReset' used without having been initialized<br>
局部变量“bReset”没有初始化就使用。
18、error C4716: 'CMyApp::InitInstance' : must return a value
“CMyApp::InitInstance”函数必须返回一个值。
19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writing<br>
连接错误:不能打开P1.exe文件,以改写内容。(一般是P1.Exe还在运行,未关闭)
20、error LNK2001: unresolved external symbol "public: virtual _ _thiscall C……::~C……(void)"
连接时发现没有实现的外部符号(变量、函数等)
最常见的20种VC++编译错误信息
1、fatal error C1010: unexpected end of file while looking for precompiled header directive。
寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h")
2、fatal error C1083: Cannot open include file: 'R…….h': No such file or directory
不能打开包含文件“R…….h”:没有这样的文件或目录。
3、error C2011: 'C……': 'class' type redefinition
类“C……”重定义。
4、error C2018: unknown character '0xa3'
不认识的字符'0xa3'。(一般是汉字或中文标点符号)
5、error C2057: expected constant expression
希望是常量表达式。(一般出现在switch语句的case分支中)
6、error C2065: 'IDD_MYDIALOG' : undeclared identifier
“IDD_MYDIALOG”:未声明过的标识符。
7、error C2082: redefinition of formal parameter 'bReset'
函数参数“bReset”在函数体中重定义。
8、error C2143: syntax error: missing ':' before '{'
句法错误:“{”前缺少“;”。
9、error C2146: syntax error : missing ';' before identifier 'dc'
句法错误:在“dc”前丢了“;”。
10、error C2196: case value '69' already used
值69已经用过。(一般出现在switch语句的case分支中)
11、error C2509: 'OnTimer' : member function not declared in 'CHelloView'
成员函数“OnTimer”没有在“CHelloView”中声明。
12、error C2511: 'reset': overloaded member function 'void (int)' not found in 'B'
重载的函数“void reset(int)”在类“B”中找不到。
13、error C2555: 'B::f1': overriding virtual function differs from 'A::f1' only by return type or calling convention
类B对类A中同名函数f1的重载仅根据返回值或调用约定上的区别。
14、error C2660: 'SetTimer' : function does not take 2 parameters
“SetTimer”函数不传递2个参数。
15、warning C4035: 'f……': no return value
“f……”的return语句没有返回值。
16、warning C4553: '= =' : operator has no effect; did you intend '='?
没有效果的运算符“= =”;是否改为“=”?
17、warning C4700: local variable 'bReset' used without having been initialized
局部变量“bReset”没有初始化就使用。
18、error C4716: 'CMyApp::InitInstance' : must return a value
“CMyApp::InitInstance”函数必须返回一个值。
19、LINK : fatal error LNK1168: cannot open Debug/P1.exe for writing
连接错误:不能打开P1.exe文件,以改写内容。(一般是P1.Exe还在运行,未关闭)
20、error LNK2001: unresolved external symbol "public: virtual _ _thiscall C……::~C……(void)"