VS2008使用<winsock2.h>编译错误</winsock2.h>

时间:2010-10-31 02:19:10

标签: c++ visual-studio-2008 visual-c++ sockets

获得重新定义的&lt;&amp;尝试编译包含<winsock2.h>的VS2008 c ++项目时出现语法错误。运行Windows 7 64位。 我用谷歌搜索和搜索,答案似乎很均匀,但它似乎对我不起作用。

尝试将#include <winsock2.h>放在#include <windows.h>之前。还尝试不包括<windows.h>(因为winsock2如果遗漏则会自动包含它)。

尝试#define WIN32_LEAN_AND_MEAN和/或#define _WINSOCKAPI_之前。

在链接器中 - &gt;其他依赖项我引用了ws2_32.lib。 还尝试了#pragma comment(lib, "ws2_32.lib")

我重建整个解决方案以防万一。

常见错误(许多人似乎共享):

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

...等,等。

任何建议都将不胜感激。

3 个答案:

答案 0 :(得分:13)

我有一个“WinsockWrapper.h”标题,可以帮助我确保一致性......它的要点是;

#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")

在任何可能在任何需要winsock2.h的文件中引入windows.h的内容之前包含此内容

这个,恕我直言意味着把它放在需要winsock2.h的大多数文件的顶部......

确保您的预编译标头(如果您正在使用它)也首先使用它。

答案 1 :(得分:2)

结果&lt; WINDOWS.H&GT;在项目的其他地方(单独的.h文件)和上面的.h文件之前调用。这就是我迟到的编码。感谢您的帮助,谢谢。

我替换了那个&lt; WINDOWS.H&GT;用&调用winsock2.h&GT;现在工作正常。

包括&lt; MMSYSTEM.H&GT;然后开始随机给我带来问题(每隔一次编译)。我用#ifdef _WIN32封装了它,但它似乎仍然是随机的。在上次成功编译(每隔一次)并重新启动VS2008后保存项目似乎已“修复”它。错误是内部链接器错误(引用了mms lib)。

答案 2 :(得分:1)

这是一个众所周知的问题。不知何故MS使winsock.h和winsock2.h不兼容。 MSVC 6存在此问题。

这只是你包含的文件之一,还包括winsock.h,而你后来包含winsock2.h

解决此问题的方法之一是首先包括winsock2.h。甚至在windows.h之前(它会自动包含windows.h)