【问题标题】:VS2008 Compile error with <winsock2.h>VS2008 编译错误 <winsock2.h>
【发布时间】:2010-10-31 02:19:09
【问题描述】:

在尝试编译包含 &lt;winsock2.h&gt; 的 VS2008 c++ 项目时,出现大量 (105) 重定义和语法错误。运行 Windows 7 64 位。 我用谷歌搜索过,答案似乎很统一,但似乎对我不起作用。

尝试将#include &lt;winsock2.h&gt; 放在#include &lt;windows.h&gt; 之前。也试过不包括&lt;windows.h&gt;(因为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

...等等等等。

任何建议将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    我有一个“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 的大多数文件的顶部 ...

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

    【讨论】:

      【解决方案2】:

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

      它只是您包含的文件之一,还包含winsock.h,而您稍后包含winsock2.h

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

      【讨论】:

        【解决方案3】:

        原来 在项目的其他地方(单独的 .h 文件)和上述 .h 文件之前被调用。这就是我迟到的编码。感谢您的帮助,不胜感激。

        我用 替换了那个 调用,现在它工作正常。

        include 之后随机开始给我带来问题(每隔一个编译)。我用#ifdef _WIN32 封装了它,但它仍然看起来是随机的。在上次成功编译(每隔一次)并重新启动 VS2008 之后保存项目似乎已经“修复”了它。该错误是内部链接器错误(引用了 mms 库)。

        【讨论】:

          猜你喜欢
          • 2016-01-23
          • 1970-01-01
          • 2010-11-03
          • 2010-11-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-31
          • 1970-01-01
          相关资源
          最近更新 更多