解决boost::asio的WinSock.h has already been included

开始使用boost::asio库时,编译碰到这个错误提示:

fatal error C1189: #error : WinSock.h has already been included

查了下抛出这个错误的boost代码,原来是定义了_WINSOCKAPI_,但没有定义_WINSOCK2API_

那哪里定义了_WINSOCKAPI_呢?

后来在网上查了下,原来是我包含了Windows.h头文件,而Windows.h头文件又包含了WinSock.h这个老东西

知道原因就简单了,试了下,方法有三种可解决此错误:

1、在包含Windows.h前定义宏WIN32_LEAN_AND_MEAN,就OK了(WIN32_LEAN_AND_MEAN表示不包含一些极少使用和偏门的资料)

2、在包含Windows.h前包含winsock2.h

3、在包含Windows.h前包含asio.hpp

From http://blog.csdn.net/gzlyb/article/details/5870326


用boost::asio时可能提示如下错误:

fatal error C1189: #error : WinSock.h has already been included

百度之后的解决方法大同小异,如下:

http://blog.csdn.net/gzlyb/article/details/5870326

但是上面的方法我都试过,没效果的说...

后来才发现怎么解决最方便(仅对自己的情况而言)。

我用的是VS2005。

项目 -> 属性 -> C/C++ -> 预处理器 -> 预处理器定义

在其中添加 : WIN32_LEAN_AND_MEAN

后记:

如果添加了WIN32_LEAN_AND_MEAN这个预处理器定义,会引发1000+个其他的错误,因此需要采取其他方法。

经过试验之后,明白了以上链接中说的第三种方法,意思就是变换一下头文件包含的顺序。具体就是,在工程总的头文件包含处,将包含有windows.h文件的头文件,写在boost相关头文件的后面。问题解决~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值