WinSock2.h 中的重新定义错误 [重复]

Posted

技术标签:

【中文标题】WinSock2.h 中的重新定义错误 [重复]【英文标题】:redefinition errors in WinSock2.h [duplicate] 【发布时间】:2011-08-23 16:50:01 【问题描述】:

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

【问题讨论】:

【参考方案1】:

我有根据的猜测是包含标题的顺序,即首先包含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>

【讨论】:

吉姆,我认为我包含我的其他头文件的方式,winsock2.h 会是第一个?我必须将winsock2放在另一个文件中吗? (见编辑 2) 希望他们能在 Visual Studio 中永远解决这个问题!感谢您解释错误。 我对 Windows API 的糟糕程度感到惊讶。 @Bartek:我同意。不完全是 API 本身有多糟糕,而是 SDK。 +1 WIN32_LEAN_AND_MEAN 拯救了我的一天 :)【参考方案2】:

在有些头疼之后:我确保#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 确实有效 @octoback 不。不在这里工作

以上是关于WinSock2.h 中的重新定义错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

VS2008 编译错误 <winsock2.h>

winsock开发重复定义问题

Winsock2.h 与 winsock2.h 和 wsock32.lib 与 ws2_32.lib

Winsock重复包含

winsock.h与winsock2.h的区别(同时包含windows.h和winsock2.h报错重定义的问题)

winsock.h与winsock2.h的区别(同时包含windows.h和winsock2.h报错重定义的问题)