WinSock2.h中的重定义错误

T.T*_*.T. 35 c++ windows networking winapi visual-studio

包括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> 
Run Code Online (Sandbox Code Playgroud)

Jim*_*som 55

我受过教育的猜测将是包含标题的顺序,即包括winsock2.h第一个(之前具有第一个含义windows.h),或者在包含之前定义WIN32_LEAN_AND_MEAN windows.h,这可以防止windows.h包含winsock v1.

#include <winsock2.h>
#include <windows.h>
Run Code Online (Sandbox Code Playgroud)

-要么-

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
Run Code Online (Sandbox Code Playgroud)

  • 我很惊讶Windows API糟透了. (40认同)
  • +1 WIN32_LEAN_AND_MEAN节省了我的一天:) (3认同)
  • 希望他们能在视觉工作室永远解决这个问题!谢谢你解释错误. (2认同)

kir*_*off 5

有些头痛后:我确信的#include "Winsock2.h"是之前的任何#include "windows.h""#include "Winsock.h"这解决了问题。

我检查递归包括,我看到的头文件,其中包括(递归地)一些#include "windows.h""#include "Winsock.h"和写#include "Winsock2.h"。在这个文件中,我添加#include "Winsock2.h"为第一个包含。

耐心一点,一一查看include并建立这个顺序,先 #include "Winsock2.h"然后#include "windows.h"

  • @octoback 不。不在这里工作 (2认同)