获得重新定义的&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
...等,等。
任何建议都将不胜感激。
答案 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)