web-dev-qa-db-ja.com

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> 
35
T.T.T.

私の経験に基づいた推測は、インクルードされたヘッダーの順序、つまりwinsock2.hを最初にインクルードする(最初の意味はwindows.hの前にある)、またはWIN32_LEAN_AND_MEANを定義してからwindows.hをインクルードし、windows.hがwinsockをインクルードしないようにします。 v1。

#include <winsock2.h>
#include <windows.h>

-または-

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <winsock2.h>
56
Jim Brissom

頭痛の種:#include "Winsock2.h"#include "windows.h""#include "Winsock.h"の前にあることを確認し、これで問題が解決しました。

私は再帰的なインクルードをチェックし、#include "windows.h""#include "Winsock.h"を(再帰的に)含むヘッダーファイルを見つけ、#include "Winsock2.h"を記述しました。このファイルでは、最初のインクルードとして#include "Winsock2.h"を追加しました。

忍耐力の問題として、インクルードを1つずつ見て、この順序を確立します。最初に#include "Winsock2.h"、次に#include "windows.h"

4
kiriloff