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;
}