WinSock2.h 中的重定义错误

redefinition errors in WinSock2.h

本文关键字:定义 错误 WinSock2      更新时间:2023-10-16

包括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 "MyFilesFileX.h" <-which #include <windows.h> 

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

在一番头痛之后:我确保在任何#include "windows.h""#include "Winsock.h"之前都有#include "Winsock2.h",这解决了这个案子。

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

只是耐心的问题,逐

个查看并建立此顺序,先#include "Winsock2.h"#include "windows.h"