【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
六、不能将参数从“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 的常见问题)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!