Windows下的基础头文件冲突

Window编程时,一般都要引用Windows.h头文件,其实这个文件也只是引用了一些其它的Windows的基础的头文件,提供了API级别的Windows系统各个方面的编程支持。 但是,winsock.h和winsock2.h头文件这两个对Windows网络编程提供支持的头文件之间没有提供头文件定义的重引用支持,也就是说如果你同时引用了两个头文件的话就会在编译时提示出类型重定义冲突:

c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/PlatformSDK/Include/WinSock2.h(109) : error C2011: “fd_set” : “struct”类型重定义

c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/PlatformSDK/Include/WinSock.h(54) : 参见“fd_set”的声明c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/PlatformSDK/Include/WinSock2.h(144) : warning C4005: “FD_SET” : 宏重定义

c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/PlatformSDK/Include/WinSock.h(88) : 参见“FD_SET”的前一个定义c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/PlatformSDK/Include/WinSock2.h(153) : error C2011: “timeval” : “struct”类型重定义

c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/PlatformSDK/Include/WinSock.h(97) : 参见“timeval”的声明c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/PlatformSDK/Include/WinSock2.h(209) : error C2011: “hostent” : “struct”类型重定义

c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/PlatformSDK/Include/WinSock.h(153) : 参见“hostent”的声明

c:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/PlatformSDK/Include/WinSock2.h(222) : error C2011: “netent” : “struct”类型重定义

以上就是错误码提示信息,会在这些头文件中引发冲突。

解决方法是,定义一个属于自己的Windows基础头文件,将Windows.h头文件中的所有内容粘贴进来,且将:#include <winsock.h>改为#include <winsock2.h>

或是加入宏WIN32_LEAN_AND_MEAN且手动引用winsock2:
 #define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>

因为winsock2是winsock的升级版,所以一般的函数接口和类型定义是可以完全兼容的,不需要任何其它的改变。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值