VS-2019 的编译错误

Posted

技术标签:

【中文标题】VS-2019 的编译错误【英文标题】:Compilation errors with VS-2019 【发布时间】:2020-01-27 06:40:53 【问题描述】:

下面的代码无法编译。我收到两个错误:

    _TCHAR* pStrAddress;
    ... some stuff here...
    IN_ADDR  sa;
    InetPton(AF_INET, pStrAddress, &sa);
    *pIP = sa.S_un.S_addr;

1) IN_ADDR --> 错误 C2065: 'AF_INET': 未声明的标识符

2) InetPton(...) --> C3861: 'InetPton': 未找到标识符

我的配置如下:

VS-2019 专业版 Windows SDK 10.0.18362.0(截至 2019 年 9 月 26 日的最新版本) 当我按 F12(转到定义)时,以下文件将在编辑器中打开 (C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared\inaddr.h 和 C:\Program文件 (x86)\Windows Kits\10\Include\10.0.18362.0\um\WS2tcpip.h)。 项目设置“C/C++ | 常规 | 附加包含目录”选中了“从父级或项目默认值继承”复选框。 Ws2_32.lib 存在于“链接器 | 附加依赖项”中(但我的问题不是关于链接问题,或者还没有) 我的程序使用 unicode 并且 InetPton(...) 扩展为 InetPtonW,这是正确的。

要恢复,从编辑器中可以访问符号,但预处理器/编译器似乎没有相同的路径。显然,我遗漏了一些很可能很明显的东西。 非常感谢您的帮助。

谢谢!

【问题讨论】:

您是否#include 了 Go to definition 中显示的标题? 找到定义AF_INETInetPton的头文件。将它们包含在您的源文件中。 是的,我试过但没有改变。包含语句如下(通常顺序) #include #include #include 发生这种情况的方式有很多种。我们需要所有代码,以便我们可以复制并粘贴它来重现错误。 Edit 包含minimal reproducible example 的问题。 【参考方案1】:

找到了! 我创建了一个小项目,仅将感兴趣的代码作为代码示例发布,并且一切编译正常。因此,首先必须有一些事情是显而易见的。然后它击中了我!:预编译的头文件不是第一个包含。

感谢大家的帮助!

错误代码:

    #include <windows.h>
    #include <ws2tcpip.h>
    #include <stdlib.h>

    #include "pch.h"   <-- this must be the first include!!!!!!

代码:

    #include "pch.h"   <-- ok, happy compiler and developer  ;)

    #include <windows.h>
    #include <ws2tcpip.h>
    #include <stdlib.h>

【讨论】:

以上是关于VS-2019 的编译错误的主要内容,如果未能解决你的问题,请参考以下文章

出现中文符号时,编译错误信息显示啥

我可以在 VS2019 中使用旧的次要版本的 C++ 编译器吗?

VS2019编译VTK-9.1.0+Qt5.15.2

VS2019编译VTK-9.1.0+Qt5.15.2

qt creator + vs2019编译记录

在vs中进行qt桌面应用开发时,编译器堆溢出的编译错误(error C1060编译器堆内存不足)