WinSock2.h中的重定义错误

时间:2011-05-11 22:28:19

标签: c++ windows visual-studio winapi networking

将winsock2.h包含在项目的文件中。

出现许多错误 -
 WinSock2.h(109) : error C2011: 'fd_set' : 'struct' type redefinition
与相应的 -
 WinSock.h(54) : see declaration of 'fd_set'

我没有看到winsock.h包含在任何标题中。

项目中是否有任何可能导致此问题的设置?

修改
但是,我在另一个文件中使用windows.h:
http://cboard.cprogramming.com/windows-programming/41212-strange-msvc-winsock2-compile-error.html

编辑2
在标题中我有:

#include <winsock2.h>  
#include <iphlpapi.h>
#include "\MyFiles\FileX.h" <-which #include <windows.h> 

2 个答案:

答案 0 :(得分:51)

我受过教育的猜测是包含标题的顺序,即首先包含winsock2.h(在windows.h之前具有第一个含义),或者在包含windows.h之前定义WIN32_LEAN_AND_MEAN,这会阻止windows.h来自winsock v1。

#include <winsock2.h>
#include <windows.h>

-OR -

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>

答案 1 :(得分:3)

经过一番头痛:我确保#include "Winsock2.h"在任何#include "windows.h""#include "Winsock.h"之前,这就解决了这个问题。

我检查了递归包含,我发现了包含(递归)某些#include "windows.h""#include "Winsock.h"的头文件并写了#include "Winsock2.h"。在这个文件中,我添加了#include "Winsock2.h"作为第一个包含。

只需耐心,请逐个查看并确定此订单,先#include "Winsock2.h"然后#include "windows.h"