首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VS2017 C++:为什么PIP_ADAPTER_ADDRESSES没有定义?

VS2017 C++:为什么PIP_ADAPTER_ADDRESSES没有定义?
EN

Stack Overflow用户
提问于 2017-10-12 20:41:11
回答 2查看 1.5K关注 0票数 2

我正在处理一个使用PIP_ADAPTER_ADDRESSES类型的文件。处理此代码的人员使用VS2013 (我当前的工作是将代码基升级到VS2017)。该#包括如下所示:

代码语言:javascript
复制
#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似乎是在由<iphlpapi.h>包含的<IPTypes.h>中定义的,但它位于#ifdef _WINSOCK2API_块中。但是,应该定义这一点,因为我包括了<winsock2.h>。这里发生了什么事?

编辑:第二次看上去,错误消息似乎并不表示它是未定义的,而是这个标识符有一个循环依赖项。我正在继续调查。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-19 17:01:42

事实证明,在我的例子中,还有另一个文件包含了<iphlpapi.h>,但没有包含<winsock2.h>,这导致了我正在处理的文件中的错误。出于某种原因,这个文件首先在VS2017中编译,而不是在VS2013中编译。我想你一定要检查你所有的资料。

票数 0
EN

Stack Overflow用户

发布于 2019-12-20 21:50:56

我也面临着类似的问题。如果不包括WinSock2.h头文件,则不会声明PIP_ADAPTER_ADDRESSES。如果包括WinSock2.h,那么会生成大量错误消息。

因此,由于这个答案,我研究了WinSock2.h头文件并找到了以下注释:

代码语言:javascript
复制
#define _WINSOCKAPI_   /* Prevent inclusion of winsock.h in windows.h */

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46718536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档