vs各种报错,需要添加预处理器定义的情况汇总

1. vs提示添加_WIN32_WINNT=0x0501的情况:
1>  Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example:
1>  - add -D_WIN32_WINNT=0x0501 to the compiler command line; or
1>  - add _WIN32_WINNT=0x0501 to your project's Preprocessor Definitions.
1>  Assuming _WIN32_WINNT=0x0501 (i.e. Windows XP target).

解决办法:右键属性 --> 配置属性 --> C/C++ --> 预处理器 --> 预处理器定义中添加以下内容:

_WIN32_WINNT=0x0501
2. vs提示添加fopen:This function or variable may be unsafe的情况:
1>MyClient.cpp(179): error C4996: 'fopen': This function or variable may be unsafe. 
  Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>          E:\vs2013\VC\include\stdio.h(211) : 参见“fopen”的声明

解决办法:右键属性 --> 配置属性 --> C/C++ --> 预处理器 --> 预处理器定义中添加以下内容:

_CRT_SECURE_NO_WARNINGS

其他类似的错误,也可以通过该方法解决:

'sscanf': This function or variable may be unsafe. Consider using sscanf_s instead. 
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
3. vs2013提示添加fatal error C1001: 编译器中发生内部错误的情况:
/boost/type_traits/common_types.h(42) : fatal error C1001: 编译器中发生内部错误。
1>  (编译器文件“msc1.cpp”,第 1325 行)
1>   要解决此问题,请尝试简化或更改上面所列位置附近的程序。
1>  请选择 Visual C++
1>  “帮助”菜单上的“技术支持”命令,或打开技术支持帮助文件来获得详细信息。
========== 生成:  成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

查阅了很多资料,一直不想更新vs2013到update 5,所以一直在尝试简单的方法。发现不是没成功,就是不适合自己!
方法一:重新生成解决方案 failed

方法二:去掉花括号({ }),自己出错的地方没有这个东西。。。failed
参考链接:编译器中发生内部错误

方法三:利用 bjam 的 cxxflags property,自己完全不知道 bjam是个什么东西。。。。failed
参考链接:VS2013编译boost 1.62:.\boost/type_traits/common_types.h(42) : fatal error C1001: 编译发生内部错误

解决办法: 更新自己的vs2013至update 5,只使用update 5的更新程序,下载地址:vs2013.5.exe 提取码:o3by

安装成功后,开启vs2013,点击菜单栏--> 帮助 --> 关于Microsoft visual studio 查看版本,会出现update 5 几个字:
在这里插入图片描述
PS: 如果想直接安装完整的vs,请先卸载以前的vs,参考链接:vs2015一键卸载所有组件工具,彻底卸载干净
然后下载带有update 5 的完全安装包(中文简体,进行完整的vs安装。参考:vs2013_update5下载链接(请使用迅雷下载)

4. vs2013提示添加To disable this warning, use -D_SCL_SECURE_NO_WARNINGS.的情况:
1>MyServer.cpp(184): error C4996: 'std::basic_string<char,std::char_traits<char>,std::allocator<char>>::copy': 
Function call with parameters that may be unsafe - this call relies on the caller to check 
that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. 
See documentation on how to use Visual C++ 'Checked Iterators'

解决办法:右键属性 --> 配置属性 --> C/C++ --> 预处理器 --> 预处理器定义中添加以下内容:

_SCL_SECURE_NO_WARNINGS
5. vs2013提示添加在switch语句中的“default”标签跳过“len”的初始化操作的情况:
1>MyServer.cpp(384): error C2361: “default”标签跳过“len”的初始化操作
1>          MyServer.cpp(377) : 参见“len”的声明

对应的源代码:

switch (msg.message)
			{
			case WM_USER + 201://WM_USER + 101是control发来的runSucccess消息
				std::cout << "Receive from " << threadID << ": " << (const char*)msg.wParam << std::endl;
				//向客户端返回json数据
				std::string json = createJson1("1201", "RunSuccess"));
				int len = json.copy(buf, json.size());
				buf[len] = '\0';
				std::cout << "server: " << buf << std::endl;
				sock->async_write_some(asio::buffer(buf, json.size()), boost::bind(&MyServer::write_handler_simple, this,
					asio::placeholders::error));
				break;
			default:
				break;
			}

出错原因: 原因是在switch 中有初始化的工作。在switch 语句中不可以有定义部分。如果有定义,如初始化的时候,必须把定义部分用{ } 括起来。

解决办法: 将报错信息所处的case部分整个用{ } 括起来(懒人的方法,没有去尝试是否只需要将定义部分用{ } 括起来)

修改后的代码如下:

switch (msg.message)
			{
			case WM_USER + 201:{//WM_USER + 101是control发来的runSucccess消息
				std::cout << "Receive from " << threadID << ": " << (const char*)msg.wParam << std::endl;
				//向客户端返回json数据
				std::string json = createJson1("1201", "RunSuccess"));
				int len = json.copy(buf, json.size());
				buf[len] = '\0';
				std::cout << "server: " << buf << std::endl;
				sock->async_write_some(asio::buffer(buf, json.size()), boost::bind(&MyServer::write_handler_simple, this,
					asio::placeholders::error));
			}
				break;
			default:
				break;
			}

参考链接:“default”标签跳过“ ”的初始化操作问题解决

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值