【问题标题】:"Cannot open source file" for header files of installed SDK已安装 SDK 的头文件“无法打开源文件”
【发布时间】:2019-02-11 23:29:43
【问题描述】:

我正在尝试继续从事其他人开始的 C++ 项目。要打开项目,我必须安装 C/C++ 工作负载;我这样做了,并且已经重新启动了我的电脑。

该项目最初针对的 Windows SDK 版本与我的 PC 上安装的版本不同。这导致 Visual Studio IntelliSense 告诉我“无法打开源文件”用于 SDK 头文件,例如 stdio.hstring.h

我转到项目设置 > VC++ 目录 > 包含目录 > 编辑,看到变量扩展到错误的路径。因此,我继续使用retarget the project 到当前安装在我的 PC (10.0.17763.0) 上的 Windows SDK 版本。

现在,如果我检查包含目录,我看到“从父级或项目默认值继承”被选中,继承的值为

$(VC_IncludePath)
$(WindowsSDK_IncludePath)

这将扩展到

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\include
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\atlmfc\include
C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\VS\include
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\um
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\shared
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\winrt
C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\cppwinrt
C:\Program Files (x86)\Windows Kits\NETFXSDK\4.6.1\Include\um

我检查了我的机器上确实存在所有这些目录。

但是,VS 一直告诉我它无法打开源文件,即使在清理和重建整个解决方案之后也是如此。该项目似乎可以编译,但代码都是波浪形的。

我的包括:

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <float.h>
#include <string.h>
#include <stdarg.h>
#include <limits.h>
#include <locale.h>
#include "svm.h"

只有stdarg.hlimits.h(来自C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.16.27023\include\)和svm.h(在项目中)有效。所有其他包含有此错误;它们都来自目录C:\Program Files (x86)\Windows Kits\10\Include\10.0.17763.0\ucrt,我可以在那个目录中找到它们。

我注意到,当我键入 #include &lt; 并让 IntelliSense 建议包含时,它也不建议来自任何 C:\Program Files (x86)\Windows Kits\10\ 子目录的内容。这些头文件列在“External Dependencies”项目节点中。

StackOverflow 充满了关于这个错误的问题,但通常是关于第三方库或项目文件,答案建议检查包含目录。我这样做了,如果我可以信任扩展的值,它们似乎是完整的,但显然还是有问题。

我基本上是 C++ 和所有“标题魔法”的新手,所以它可能与项目有关。我发现该项目包含一些“stdafx.h”文件(这是我为预编译头文件阅读的),但是项目设置说 not 使用预编译头文件,实际上我看不到任何 *.pch文件。

【问题讨论】:

  • 如果您将所有这些 C 包含更改为 C++ 包含,那会改变什么吗?
  • @TedLyngmo 会不会是把#include &lt;stdio.h&gt; 换成#include &lt;cstdio&gt; 之类的?
  • @TedLyngmo 我之前换掉了所有损坏的,但没有任何改变。出于某种奇怪的原因,我决定现在再做一次——只要我只将最后一个包含从#include &lt;locale.h&gt; 更改为#include &lt;clocale&gt;,所有错误和曲线都消失了,即使我撤消了更改,也不会出现。我不知道为什么它现在有帮助,但之前没有帮助,但非常感谢!
  • @TedLyngmo 也许你可以把它放在一个答案中——显然一切都是正确的,但 VS 需要大量时间和动力来更新其内部缓存。也许清理和重建,然后重新打开项目并编辑标题,直到它最终刷新任何有罪的缓存都有帮助。
  • 嗯 ...如果您可以改回 &lt;locale.h&gt; 并且它仍在工作,我想还有其他事情发生,也许是 "pch.h"。即使您的项目设置是不使用它,您的项目中可能有一个旧的包含在某处?

标签: c++ visual-studio header-files


【解决方案1】:

Ted Lyngmo's comment 的鼓励下,我开始编辑其中一个导入,突然所有错误都消失了,问题也得到了解决,尽管没有任何改变。

我以前这样做过,但后来没有帮助,所以不幸的是,我不知道为什么第二次有帮助。尽管它令人不满意 - 这似乎是一个缓存问题,毕竟在清理和重建后仍然存在。

也许不同之处在于我第二次编辑是在清理和重建解决方案之后,但我不能保证。

我对这个结果不是很满意,因为我很想知道什么有帮助以及为什么,但最终这解决了问题。所以看起来你必须重新定位,然后清理,然后重建,也许重新启动 VS,并编辑一些导入以强制使任何缓存失效。

P.S.:另外,同时,去参加 StackOverflow。显然这有帮助。因此,我将此标记为社区答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-10
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    相关资源
    最近更新 更多