2010-10-31 21 views
7

Obteniendo montones (105) de redefinir & errores de sintaxis al intentar compilar mi proyecto VS2008 C++ con <winsock2.h> incluido. Ejecutando Windows 7 64bit. He buscado en Google y la respuesta parece bastante uniforme, pero parece que no funciona para mí.VS2008 Error de compilación con <winsock2.h>

Intenté poner #include <winsock2.h> antes de #include <windows.h>. También intenté no incluir <windows.h> (ya que winsock2 lo incluye automáticamente si falta).

Probado con #define WIN32_LEAN_AND_MEAN y/o #define _WINSOCKAPI_ anterior.

En el enlazador -> dependencias adicionales que he mencionado ws2_32.lib. También intenté #pragma comment(lib, "ws2_32.lib").

Reconstruyo toda la solución por si acaso.

error habitual (compartida por muchos parece):

Error 5 error C2011: 'sockaddr' : 'struct' type redefinition c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 206 RallyAction 
Error 6 error C2143: syntax error : missing '}' before 'constant' c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 384 RallyAction 
Error 7 error C2143: syntax error : missing ';' before 'constant' c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 384 RallyAction 
Error 8 error C2059: syntax error : 'constant' c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h 384 RallyAction 

... etc, etc.

Cualquier sugerencia sería apreciada.

Respuesta

12

Tengo un encabezado "WinsockWrapper.h" que me ayuda a garantizar la consistencia ... La esencia es;

#ifndef _WINDOWS_ 
#define WIN32_LEAN_AND_MEAN 
#include <windows.h> 
#undef WIN32_LEAN_AND_MEAN 
#endif 

#include <winsock2.h> 

#pragma comment(lib, "ws2_32.lib") 

Incluir esto antes de cualquier otra cosa que pudiera tirar de windows.h en cualquier archivo que necesita Winsock2.h

Esto, en mi humilde opinión significa poner en la parte superior de la mayoría de los archivos que necesitan WINSOCK2.H ..

Asegúrate de que tu encabezado precompilado, si lo estás usando, también lo tenga primero.

1

Este es un problema bien conocido. De algún modo, MS hizo que winsock.h y winsock2.h fueran incompatibles. Este problema existe desde MSVC 6.

Es sólo uno de los archivos que incluya también incluye winsock.h, mientras que se incluye más adelante Winsock2.h

Una de las maneras de solucionar este Winsock2.h está incluyendo en primer lugar. Incluso antes de windows.h (incluirá windows.h automáticamente)

2

Resulta < windows.h> se llamó en otro lugar en proyecto (archivo .h separado) y antes del archivo .h anterior. Eso es lo que obtengo por programar tarde. Gracias por la ayuda, apreciado.

He reemplazado ese < Windows.h> llamando con < winsock2.h> y está funcionando bien ahora.

incluyen < mmsystem.h> comenzando aleatoriamente, aunque me da problemas después (cada dos compilaciones). Lo tengo encapsulado con #ifdef _WIN32 pero aún parece aleatorio. Después de haber guardado el proyecto después de la última vez que compiló satisfactoriamente (en cualquier otro momento) y reinició VS2008, parece que lo 'arregló'. El error fue un error de enlazador interno (se hizo referencia a la referencia de mms).

Cuestiones relacionadas