尝试编译包含
<winsock2.h>
的 VS2008 c++ 项目时,出现大量 (105) 重新定义和语法错误。运行 Windows 7 64 位。
我用谷歌搜索了一下,答案似乎很统一,但它似乎对我不起作用。
尝试将
#include <winsock2.h>
放在 #include <windows.h>
之前。还尝试不包含 <windows.h>
(因为 winsock2 如果丢失,会自动包含它)。
之前尝试过
#define WIN32_LEAN_AND_MEAN
和/或 #define _WINSOCKAPI_
。
在链接器 -> 附加依赖项中我引用了 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
...等等,等等
如有任何建议,我们将不胜感激。
我有一个“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的文件的顶部...
确保您的预编译标头(如果您正在使用它)也首先包含此内容。
这是一个众所周知的问题。不知何故,微软使winsock.h和winsock2.h不兼容。这个问题从 MSVC 6 开始就存在。
这只是您包含的文件之一还包含winsock.h,而您稍后包含winsock2.h
解决此问题的方法之一是首先包含winsock2.h。甚至在 windows.h 之前(它会自动包含 windows.h)
结果 < windows.h> 在项目的其他地方(单独的 .h 文件)且在上述 .h 文件之前被调用。这就是我迟到编码所得到的结果。感谢您的帮助,感激不尽。
我用 < windows.h> 替换了 < winsock2.h> 调用,现在工作正常。
include < mmsystem.h>在那之后开始随机给我带来问题(每隔一个编译)。我用 #ifdef _WIN32 封装了它,但它看起来仍然是随机的。在上次成功编译后(每隔一次)保存项目并重新启动 VS2008 似乎已经“修复”了它。该错误是内部链接器错误(引用了 mms 库)。
我不知道它是如何工作的,但添加到预处理器选项
_WINSOCKAPI_
解决了所有巨大解决方案中的多个重新定义