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 中的重新定义错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Winsock2.h 与 winsock2.h 和 wsock32.lib 与 ws2_32.lib