2010-10-31 119 views
7

当试图编译我的VS2008 C++项目时使用<winsock2.h>来重新定义&语法错误的堆(105)。运行Windows 7 64位。 我已经搜索和搜索,答案似乎很统一,但它似乎并没有为我工作。VS2008编译错误<winsock2.h>

试过在#include <windows.h>之前放#include <winsock2.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 

...等等,等等。

任何建议,将不胜感激。

回答

12

我有一个“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") 

别的可能拉WINDOWS.H在需要winsock2.h

此,恕我直言意味着把它在需要winsock2.h大多数文件的顶部的任何文件之前,先这个..

确保你的预编译头如果你正在使用它,也首先有这个。

1

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

存在这个问题,只是你有还包括WINSOCK.H,而你后面的包含winsock2.h

一个解决这个问题首先包括winsock2.h方式中的一个文件。即使WINDOWS.H之前(它会自动包括WINDOWS.H)

2

原来< WINDOWS.H>在别处项目称为(单独的.h文件中),并在上面的.h文件中。这就是我很晚才得到的编码。感谢您的帮助,感激。

我替换了那个< windows.h>用<调用winsock2.h>,它现在工作正常。

包括< mmsystem.h>然后开始随机给我的问题,虽然(每隔一个编译)。我用#ifdef _WIN32封装了它,但它仍然是随机的。在上次编译成功(每隔一段时间)之后保存项目并重新启动VS2008似乎已经“修复”了它。该错误是一个内部链接器错误(得到了mms库引用)。