WinSock2.h中的重新定义错误

42
在项目文件中包含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个回答

69

我推测这可能与包含的头文件的顺序有关,即首先包含 winsock2.h (在此之前包括 windows.h ),或在包含 windows.h 之前定义 WIN32_LEAN_AND_MEAN,这将防止 windows.h 包含 winsock v1。

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

-或者-

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

Jim,我认为我包含其他头文件winsock2.h的方式应该是放在最前面的?我是不是必须把winsock2放在另外一个文件中?(参见编辑2) - T.T.T.
2
希望他们能在Visual Studio中永久修复这个问题!感谢您解释错误。 - hookenz
54
我很惊讶Windows API有多烂。 - Bartek Banachewicz
@Bartek:我同意。API 本身并不是很糟糕,主要是 SDK 的问题。 - alecov
4
+1 WIN32_LEAN_AND_MEAN 挽救了我的一天 :) - Wolf
显示剩余3条评论

5
在经过烦恼之后,我确保将 #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"

WIN32_LEAN_AND_MEAN确实起作用。 - Liviu
3
没用。这里不起作用。 - TheRealChx101

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接