【C++】编译错误笔记

 

一、warning C4018: '<' : signed/unsigned mismatch

for(int i=0; i < strlen(str);i++)
改为
for(unsigned int i=0; i < strlen(str);i++)
就行了。

strlen返回的是无符号数,你要用无符号数比较就不产生警告。

 

二、sprintf': This function or variable may be unsafe. Consider using sprintf_s

方法一:将原来的旧函数替换成新的 Security CRT functions,即加上_s后缀;

方法二:用以下方法屏蔽这个警告:

声明 #param warning(disable:4996)

 

三、未定义的标识符“_TCHAR*”

解决办法:在头文件中添加#include <tchar.h>。

 

四、error C2668:"pow":对重载函数的调用不明确

错误原因:

VS2010中,数学函数的参数检查更为严格。
关于pow()有“long double pow(long double,int)”或“float pow(float,int)”或“double pow(double,int)”


解决方法:
明确使用哪种数据类型。
比如使用:pow((double)x,y)即明确使用double pow(double,int)

 

五、不能将参数从“const char [10]”转换为“const wchar_t *

同样的错误描述有:没有与参数列表匹配的重载函数实例

原因:VS2008默认是UNICODE环境

方法1:把所有字符串相关的操作都用_T() TEXT() 包含起来,或者直接用L前缀。

str.Format(L"x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK))


方法2:使用多字节字符集(MBCS)

在工程属性里面改(右键项目>属性>配置属性>高级,把高级属性中的字符集改为使用多字节字符集。

修改了之后,可能还会报错:Building an MFC project for a non-Unicode character set is deprecated

设置为多字节工程需要下载和安装一个文件:http://www.microsoft.com/zh-cn/download/details.aspx?id=40770

安装了之后,就可以解决这个问题了。之后再编译,就会成功。不过安装之后,应该重启vs2013。就是安装   Multibyte MFC Library for Visual Studio 2013

VS2013多字节工程问题

 

六、不能将参数从“CString”转换为“const char

跟上述问题相似,有两种解决方法:

方法1:直接在字符串前添加L

如果是函数,就强制转换  strcpy(Resource, (char*)(LPCTSTR)Str);

 

方法2:使用多字节字符集

 

七、无法打开文件“xxx.lib”

方法1:将xxx.lib和调用pragma comment的源文件放在一个目录(注意是调用它的源文件,不是头文件)。

方法2:也可以在xxx.lib前加上全路径名如:#pragma comment(lib, “c:\windows\system32\xxx.lib”)。

方法3:修改项目属性中,配置属性–》连接器–>常规–》附加库目录 中加上xxx.lib所在目录。

方法4:工具–》选项–》项目和解决方案–》vc++项目–》选择库文件, 在下面的目录中添加xxx.lib所在目录。

 

八、VC6 C++编译错误unresolved external symbol __imp__SetupDiDestroyDeviceInfoList@4

error LNK2001: unresolved external symbol __imp__SetupDiGetDeviceRegistryPropertyA@28
error LNK2001: unresolved external symbol __imp__SetupDiEnumDeviceInfo@12
error LNK2001: unresolved external symbol __imp__SetupDiGetClassDevsA@16

解决方法:

1、在程序的头部加上 #pragma comment(lib,"setupapi")

2、Project--Settings--Link

 

九、VC6 C++项目转VS2013项目

用VS2013打开.dsw文件,重新生成时可能出现错误,则修改项目属性:

 

修改后可能还会出现错误:

无法打开源文件 "winsock2.h";
应输入标识符 意外的标记位于“;”之前;

这些错误并不是出现在我们自己写的.h文件中,可能是setupapi.h之类的文件,他们中的某些变量名称和自己写的 .h文件相同了,所以可以改一下我们自己的.h文件的定义。

 

十、Error spawning 'vcspawn.exe'. The build could not be performed

可能在杀毒或者是你误删了'vcspawn.exe'这个文件。

从电脑检索一下vcspawn.exe,然后复制到安装目录下。(可从快捷方式中右键选择“打开文件位置”找到)。

C:\Program Files\Microsoft Visual Studio\Common\MSDev98\Bin(我是装在c盘的)这个文件夹下面就ok了。

 

十一、链接器工具错误(导致 LNK2019 的常见问题)

参考官方文档:https://learn.microsoft.com/zh-cn/cpp/error-messages/tool-errors/linker-tools-error-lnk2019?view=msvc-160

 

posted @ 2021-12-21 09:12  不溯流光  阅读(532)  评论(0编辑  收藏  举报