web-dev-qa-db-fra.com

erreurs de redéfinition dans WinSock2.h

Y compris winsock2.h, dans un fichier d'un projet.

Obtenir de nombreuses erreurs dans -
WinSock2.h(109) : error C2011: 'fd_set' : 'struct' type redefinition
avec un correspondant -
WinSock.h(54) : see declaration of 'fd_set'

Je ne vois pas winsock.h inclus dans aucun des en-têtes.

Y a-t-il un paramètre dans le projet qui peut être à l'origine de cela?

[~ # ~] modifier [~ # ~]
Cependant, j'utilise windows.h dans un autre fichier:
http://cboard.cprogramming.com/windows-programming/41212-strange-msvc-winsock2-compile-error.html

EDIT 2
Dans l'en-tête, j'ai:

#include <winsock2.h>  
#include <iphlpapi.h>
#include "\MyFiles\FileX.h" <-which #include <windows.h> 
35
T.T.T.

Ma supposition éclairée serait l'ordre des en-têtes inclus, c'est-à-dire inclure winsock2.h premier (avec la première signification avant windows.h), ou définissez WIN32_LEAN_AND_MEAN avant d'inclure windows.h, ce qui empêche windows.h d'inclure winsock v1.

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

-ou-

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

Après quelques maux de tête: je me suis assuré qu'un #include "Winsock2.h" est avant tout #include "windows.h" et "#include "Winsock.h" et cela a résolu le cas.

J'ai vérifié les inclusions récursives, j'ai repéré les fichiers d'en-tête qui incluent (récursivement) certains #include "windows.h" et "#include "Winsock.h" et écrivez un #include "Winsock2.h". dans ces fichiers, j'ai ajouté #include "Winsock2.h" comme premier inclus.

Juste une question de patience, regardez inclut un par un et établissez cet ordre, d'abord #include "Winsock2.h" puis #include "windows.h"

4
kiriloff