VS2017 C++:为什么 PIP_ADAPTER_ADDRESSES 未定义?
VS2017 C++: why is PIP_ADAPTER_ADDRESSES undefined?
我正在处理一个使用 PIP_ADAPTER_ADDRESSES
类型的文件。编写这段代码的人使用的是 VS2013(我目前的工作是将代码库升级到 VS2017)。 #includes 看起来像这样:
#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
似乎在 <IPTypes.h>
中定义,它包含在 <iphlpapi.h>
中,但它在 #ifdef _WINSOCK2API_
块内。但是,这应该被定义,因为我包括了 <winsock2.h>
。这是怎么回事?
编辑: 乍一看,该错误消息似乎并不表示它未定义,而是表示此标识符存在循环依赖性。我正在继续调查。
事实证明,在我的情况下,有另一个文件包含 <iphlpapi.h>
但不包含 <winsock2.h>
,这导致我正在处理的文件出现错误。由于某种原因,此文件首先在 VS2017 中编译,但在 VS2013 中未编译。我想一定要检查所有包含的内容。
我遇到过类似的问题。当不包含 WinSock2.h
头文件时,则不声明 PIP_ADAPTER_ADDRESSES
。如果包含WinSock2.h
,则会生成大量错误消息。
所以,多亏了这个答案,我调查了 WinSock2.h
头文件并发现了这条评论:
#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */
我更改了在 WinSock2.h
和 iphlpapi.h
之后移动 Windows.h
的包含文件的顺序,这解决了问题。
我正在处理一个使用 PIP_ADAPTER_ADDRESSES
类型的文件。编写这段代码的人使用的是 VS2013(我目前的工作是将代码库升级到 VS2017)。 #includes 看起来像这样:
#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
似乎在 <IPTypes.h>
中定义,它包含在 <iphlpapi.h>
中,但它在 #ifdef _WINSOCK2API_
块内。但是,这应该被定义,因为我包括了 <winsock2.h>
。这是怎么回事?
编辑: 乍一看,该错误消息似乎并不表示它未定义,而是表示此标识符存在循环依赖性。我正在继续调查。
事实证明,在我的情况下,有另一个文件包含 <iphlpapi.h>
但不包含 <winsock2.h>
,这导致我正在处理的文件出现错误。由于某种原因,此文件首先在 VS2017 中编译,但在 VS2013 中未编译。我想一定要检查所有包含的内容。
我遇到过类似的问题。当不包含 WinSock2.h
头文件时,则不声明 PIP_ADAPTER_ADDRESSES
。如果包含WinSock2.h
,则会生成大量错误消息。
所以,多亏了这个答案,我调查了 WinSock2.h
头文件并发现了这条评论:
#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */
我更改了在 WinSock2.h
和 iphlpapi.h
之后移动 Windows.h
的包含文件的顺序,这解决了问题。