【问题标题】:VS2017 C++: why is PIP_ADAPTER_ADDRESSES undefined?VS2017 C++:为什么 PIP_ADAPTER_ADDRESSES 未定义?
【发布时间】:2017-10-12 20:41:11
【问题描述】:

我正在处理一个使用 PIP_ADAPTER_ADDRESSES 类型的文件。编写此代码的人使用的是 VS2013(我目前的工作是将代码库升级到 VS2017)。 #include 看起来像这样:

#include <winsock2.h> // Include for security.h
#include <security.h> // Include for EXTENDED_NAME_FORMAT
#include <iphlpapi.h> // Include for PIP_ADAPTER_ADDRESSES

我在尝试编译时得到error C2061: syntax error: identifier 'PIP_ADAPTER_ADDRESSES'。这似乎是 VS2017 中的问题,但不是 VS2013。

PIP_ADAPTER_ADDRESSES 似乎是在&lt;IPTypes.h&gt; 中定义的,它包含在&lt;iphlpapi.h&gt; 中,但它位于#ifdef _WINSOCK2API_ 块内。但是,这应该被定义,因为我包含了&lt;winsock2.h&gt;。这是怎么回事?

编辑: 乍一看,该错误消息似乎并不表示它未定义,而是表示此标识符存在循环依赖关系。我正在继续调查。

【问题讨论】:

    标签: c++ visual-studio winsock2


    【解决方案1】:

    事实证明,在我的情况下,存在另一个包含 &lt;iphlpapi.h&gt; 但不包含 &lt;winsock2.h&gt; 的文件,这导致了我正在处理的文件中的错误。出于某种原因,这个文件首先在 VS2017 中编译,但在 VS2013 中没有。我猜,请确保检查所有包含的内容。

    【讨论】:

      【解决方案2】:

      我遇到了类似的问题。如果不包含WinSock2.h 头文件,则不声明PIP_ADAPTER_ADDRESSES。如果包含WinSock2.h,则会产生很多错误信息。

      所以,多亏了这个答案,我调查了WinSock2.h 头文件,发现了这条评论:

      #define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */
      

      我更改了包含文件在WinSock2.hiphlpapi.h 之后移动Windows.h 的顺序,这解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-12
        • 2021-07-22
        • 2021-07-18
        • 2012-06-21
        • 2022-01-05
        • 2017-10-10
        • 2021-01-17
        • 2017-09-02
        相关资源
        最近更新 更多