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 改为#include

或是加入宏WIN32_LEAN_AND_MEAN且手动引用winsock2:
 #define WIN32_LEAN_AND_MEAN
#include
#include

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

你可能感兴趣的:(软件分析)