2011-05-11 18 views
29

Incluyendo winsock2.h, en un archivo de un proyecto.errores de redefinición en WinSock2.h

conseguir muchos errores en -
WinSock2.h(109) : error C2011: 'fd_set' : 'struct' type redefinition
con la correspondiente -
WinSock.h(54) : see declaration of 'fd_set'

no veo winsock.h incluido en cualquiera de las cabeceras.

¿Hay alguna configuración en el proyecto que pueda estar causando esto?

EDITAR
Sin embargo, estoy usando windows.h en otro archivo:
http://cboard.cprogramming.com/windows-programming/41212-strange-msvc-winsock2-compile-error.html

EDIT 2
En la cabecera que tengo:

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

¿Está incluida la stdlib.h? –

+0

@Heath: no señor. –

Respuesta

43

Mi conjetura sería el orden de los encabezados incluidos, es decir, incluir winsock2.h primero (con el primer meanin g antes del windows.h), o define WIN32_LEAN_AND_MEAN antes de incluir windows.h, lo que evita que windows.h incluya winsock v1.

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

-o-

#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 
#include <winsock2.h> 
+0

Jim, ¿pensaría que la forma en que incluí mi otro archivo de encabezado, winsock2.h sería primero? ¿Tengo que poner el winsock2 en el otro archivo? (ver EDIT 2) –

+1

¡Ojalá pudieran arreglar esto para siempre en Visual Studio! Gracias por explicar los errores. – Matt

+31

Me sorprende la cantidad de API de Windows es una mierda. –

3

Después de algún dolor de cabeza: Me aseguré de que un #include "Winsock2.h" es antes de cualquier #include "windows.h" y "#include "Winsock.h" y esto resuelve el caso.

he comprobado el recursiva incluye, vi a los ficheros de cabecera que incluyen (de forma recursiva) y algunos #include "windows.h""#include "Winsock.h" y escribir una #include "Winsock2.h". en estos archivos, agregué #include "Winsock2.h" como el primer include.

Sólo es cuestión de paciencia, incluye un vistazo a uno por uno y establecer este orden, primero #include "Winsock2.h" continuación #include "windows.h"

+0

WIN32_LEAN_AND_MEAN realmente funciona – Liviu

+2

@octoback no. No funciona aquí – TheRealChx101

Cuestiones relacionadas