编译器控告 "Error C2065: 'ENOTEMPTY': undeclared identifier"。 VS 在 WinSock.h 而不是 errno.h 中查找它的定义

Compiler accuses "Error C2065: 'ENOTEMPTY': undeclared identifier". VS looks for its definition in WinSock.h instead of errno.h

在 Visual Studio 2010 年工作期间,我开发了一个库 p/Invoke 来自第三方本机 C++ dll 的一些内容。我已经有一段时间没有接触过这个解决方案中的 C++ 项目了(尽管我时不时地回到 C# 项目)并且一切正常。今天早上我不得不向 C++ 项目添加一个新方法,但我开始收到以下错误:

错误 2 错误 C2065:'ENOTEMPTY':未声明的标识符 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\system_error 40 1 xxxNativeDll

("xxxNativeDll" 是我对第三方 .dll 的 C++ 包装器)

我不是 C++ 专家,但我在网上浏览了一下,我能找到的最接近的线索是 post:https://social.msdn.microsoft.com/Forums/vstudio/en-US/0abac212-6bde-40a0-81ce-9e2b0ddaa106/conversion-error-while-converting-project-from-msvs-2008-to-msvs-2010?forum=vcgeneral

基本上有人得到了 system_error 中所有宏的未声明标识符错误,在回答中,他被告知这些宏是在 errno.h 中定义的。好吧,这是我在构建输出中包含的内容,从 system_error 到错误本身:

2> 注:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\system_error

2> 注意:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\cerrno

2> 注:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\errno.h

2> 注:包括文件:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h

2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\system_error(40):错误 C2065:'ENOTEMPTY':未声明的标识符

为了确定,我突出显示了 ENOTEMPTY,按下 F12(转到定义),唉!我被重定向到 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include 文件夹中的 WinSock.h。令人惊讶的是,只有 ENOTEMPTY 重定向到这个文件,system_error 中的所有其他宏都重定向到 errno.h。我很确定这与我前一段时间安装了 WinDDK 7 有关,但是由于我很长时间不需要在这个解决方案中重建 C++ 项目,所以从那以后就没有错误那么.

所以,长话短说,来自 system_error 的 VS "thinks" ENOTEMPTY 在 WinSock.h 中定义,而它应该在 errno.h 中查找它的定义。就像我说的,我不是 C++ 专业人士,那么我该如何解决呢?拜托,我不想将 WinSock.h 添加到我的包含中,但我希望 VS 在正确的文件中查找 ENOTEMPTY。

正如评论中指出的,它与 WinSock.h 无关,而是一个错误的 errno.h 文件。我打算删除这个问题,但决定让它继续存在,因为关于这类问题的信息不足。