【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

四、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)

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

VS2008默认是UNICODE环境,所以把你所有字符串相关的操作都用_T() TEXT() 包含起来,或者直接用L前缀。
如果想用MBCS,可以在工程属性里面改(右键项目>属性>配置属性>高级,把高级属性中的字符集改为使用多字节字符集)。

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

同样的错误描述有:

1、Building an MFC project for a non-Unicode character set is deprecated

2、没有与参数列表匹配的重载函数实例

https://blog.csdn.net/wzy0754/article/details/51744928

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

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