4

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

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

我去了项目设置> VC++ 目录> 包含目录> 编辑,看到变量扩展到错误的路径。因此,我继续将项目重新定位到当前安装在我的 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.h, limits.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 <并让 IntelliSense 建议包含时,它也不建议来自任何C:\Program Files (x86)\Windows Kits\10\子目录的那些。但是,这些头文件在“外部依赖项”项目节点中。

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

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

4

1 回答 1

1

在Ted Lyngmo 的评论的鼓舞下,我开始编辑其中一个导入文件,突然间所有错误都消失了,问题也得到了解决,尽管没有任何改变。

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

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

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

PS:另外,在此期间,去参加 StackOverflow。显然这有帮助。因此,我将此标记为社区答案。

于 2019-02-11T15:29:43.863 回答