【发布时间】:2019-02-11 23:29:43
【问题描述】:
我正在尝试继续从事其他人开始的 C++ 项目。要打开项目,我必须安装 C/C++ 工作负载;我这样做了,并且已经重新启动了我的电脑。
该项目最初针对的 Windows SDK 版本与我的 PC 上安装的版本不同。这导致 Visual Studio IntelliSense 告诉我“无法打开源文件”用于 SDK 头文件,例如 stdio.h 或 string.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.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\ 子目录的内容。这些头文件列在“External Dependencies”项目节点中。
StackOverflow 充满了关于这个错误的问题,但通常是关于第三方库或项目文件,答案建议检查包含目录。我这样做了,如果我可以信任扩展的值,它们似乎是完整的,但显然还是有问题。
我基本上是 C++ 和所有“标题魔法”的新手,所以它可能与项目有关。我发现该项目包含一些“stdafx.h”文件(这是我为预编译头文件阅读的),但是项目设置说 not 使用预编译头文件,实际上我看不到任何 *.pch文件。
【问题讨论】:
-
如果您将所有这些 C 包含更改为 C++ 包含,那会改变什么吗?
-
@TedLyngmo 会不会是把
#include <stdio.h>换成#include <cstdio>之类的? -
@TedLyngmo 我之前换掉了所有损坏的,但没有任何改变。出于某种奇怪的原因,我决定现在再做一次——只要我只将最后一个包含从
#include <locale.h>更改为#include <clocale>,所有错误和曲线都消失了,即使我撤消了更改,也不会出现。我不知道为什么它现在有帮助,但之前没有帮助,但非常感谢! -
@TedLyngmo 也许你可以把它放在一个答案中——显然一切都是正确的,但 VS 需要大量时间和动力来更新其内部缓存。也许清理和重建,然后重新打开项目并编辑标题,直到它最终刷新任何有罪的缓存都有帮助。
-
嗯 ...如果您可以改回
<locale.h>并且它仍在工作,我想还有其他事情发生,也许是"pch.h"。即使您的项目设置是不使用它,您的项目中可能有一个旧的包含在某处?
标签: c++ visual-studio header-files