Compiling errors of winsock types redefinition


Q:
When compiling a Win32 network application in VC, you may meet many errors from within winsock2.h:
 
c:/program files/devstudio/vc98/include/winsock2.h(99) : error C2011: 'fd_set' : 'struct' type redefinition
c:/program files/devstudio/vc98/include/winsock2.h(134) : warning C4005: 'FD_SET' : macro redefinition
c:/program files/devstudio/vc98/include/winsock.h(83) : see previous definition of 'FD_SET'
c:/program files/devstudio/vc98/include/winsock2.h(143) : error C2011: 'timeval' : 'struct' type redefinition
c:/program files/devstudio/vc98/include/winsock2.h(199) : error C2011: 'hostent' : 'struct' type redefinition
c:/program files/devstudio/vc98/include/winsock2.h(212) : error C2011: 'netent' : 'struct' type redefinition
c:/program files/devstudio/vc98/include/winsock2.h(219) : error C2011: 'servent' : 'struct' type redefinition
 
It appears that this might happen if you #include both winsock2.h and winsock.h, but generally this is not the case - you may find that you only include one header file(say, winsock2.h) in your source.
 
A:
This is because winsock.h is included in windows.h, and windows.h is implicitly included in atlbase.h(for alt project).
 
So winsock2.h must be included before windows.h. 
Or, you can #define WIN32_LEAN_AND_MEAN before you include windows.h and it will stop 
windows.h from including winsock.h. Generally you can do this in StdAfx.h.
 
Also, in winsock2.h:
/*
 * Pull in WINDOWS.H if necessary
 */
#ifndef _INC_WINDOWS
#include <windows.h>
#endif /* _INC_WINDOWS */
 
So you can bypass this including via #define _INC_WINDOWS if necessary.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值