2011-05-11 49 views
29

將winsock2.h包含在項目文件中。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

EDIT 2
在標題中,我有:

#include <winsock2.h> 
#include <iphlpapi.h> 
#include "\MyFiles\FileX.h" <-which #include <windows.h> 
+1

你包括stdlib.h中? – 2011-05-11 22:31:00

+0

@海瑟:不,先生。 – 2011-05-11 22:36:07

回答

43

我的猜測將包括標題的順序,即包括winsock2.h第一(與第一meanin g之前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> 
+0

Jim,我會想我包括我的其他頭文件的方式,winsock2.h會是第一個?我必須將winsock2放在其他文件中嗎? (見編輯2) – 2011-05-11 22:36:57

+1

希望他們能夠在視覺工作室中永遠解決這個問題!感謝您解釋錯誤。 – Matt 2012-12-04 03:02:19

+31

我很驚訝多少Windows API很糟糕。 – 2012-12-11 12:44:14

3

有些頭痛後:我確信的是#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"

+0

WIN32_LEAN_AND_MEAN確實有效 – Liviu 2015-03-12 07:31:29

+2

@octoback nope。不在這裏工作 – TheRealChx101 2015-09-02 12:23:16