boost::asio和windows.h同时使用时出现error C1189: #error: WinSock.h has already been included报错的问题
问题描述
当我的main.cpp文件中写了#include <windows.h>
,而工程的其他.cpp或.h文件中写了#include <boost/asio.hpp>
或#include <boost/asio/serial_port.hpp>
之类的boost/asio库的时候,会出现如下报错
error C1189: #error: WinSock.h has already been included
解决方案
这个问题比较玄学,好几个方法可以解决该问题
解决方案1
在main.cpp中添加#include <boost/asio.hpp>
或#include <boost/asio/serial_port.hpp>
,注意:一定要在#include <windows.h>
之前添加,不能在#include <windows.h>
之后添加,如图所示
解决方案2
在main.cpp中添加#include <WinSock2.h>
,也是一定要在#include <windows.h>
之前添加,如图所示:
解决方案3
在main.cpp中将#include <windows.h>
移动到所有#include
之后,如图所示
总结
核心就是要将先进行#include <boost/asio.hpp>
或#include <boost/asio/serial_port.hpp>
操作,然后再进行#include <windows.h>
操作即可。