我正在尝试继续从事其他人开始的 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
文件。