我正在处理一个使用PIP_ADAPTER_ADDRESSES类型的文件。处理此代码的人员使用VS2013 (我当前的工作是将代码基升级到VS2017)。该#包括如下所示:
#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>。这里发生了什么事?
编辑:第二次看上去,错误消息似乎并不表示它是未定义的,而是这个标识符有一个循环依赖项。我正在继续调查。
发布于 2017-10-19 17:01:42
事实证明,在我的例子中,还有另一个文件包含了<iphlpapi.h>,但没有包含<winsock2.h>,这导致了我正在处理的文件中的错误。出于某种原因,这个文件首先在VS2017中编译,而不是在VS2013中编译。我想你一定要检查你所有的资料。
发布于 2019-12-20 21:50:56
我也面临着类似的问题。如果不包括WinSock2.h头文件,则不会声明PIP_ADAPTER_ADDRESSES。如果包括WinSock2.h,那么会生成大量错误消息。
因此,由于这个答案,我研究了WinSock2.h头文件并找到了以下注释:
#define _WINSOCKAPI_ /* Prevent inclusion of winsock.h in windows.h */我更改了在Windows.h和WinSock2.h之后移动iphlpapi.h的包含文件的顺序,这解决了这个问题。
https://stackoverflow.com/questions/46718536
复制相似问题