Visual Studio 2015在创建简单的测试控制台程序时给出了错误

Har*_*rpo 21 c++

这是我正在使用的代码.

#include "stdafx.h"
#include <iostream>

int main() {
    std::cout << "hi";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我创建简单的c ++控制台应用程序并尝试构建它时,会发生以下错误:

cannot open include file 'stdio.h': No such file or directory
Run Code Online (Sandbox Code Playgroud)

为什么?stdio.h不应该作为标准库包含在内吗?我能做些什么来取回它?

编辑:我刚看了C:\ Program Files(x86)\ Microsoft Visual Studio 14.0\VC\include目录.没有stdio.h或stdafx.h.我真的不确定为什么.我怎样才能让他们回来?

小智 46

那是因为Visual studio改变了C头的路径.

那里有你的信息:https://blogs.msdn.microsoft.com/vcblog/2015/03/03/introducing-the-universal-crt/

我做的是解决这个问题:

去吧Project->Properties->.在Configuraton Properties->VC++ Diretories->Library Directories附加到路径C:\Program Files (x86)\Windows Kits\10\Lib\10.0.10150.0\ucrt\(选择你的架构)

C/C++->General->Additional include directories添加一条路径:

C:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt
Run Code Online (Sandbox Code Playgroud)

注意:10.0.10150.0可能因您的版本而异.


Sea*_*ema 33

我有一个类似的问题,将现有的C项目从Visual Studio 2013升级到VS2017(我跳过了VS2015); 也没有找到任何标准标题.

接受的答案(由Cezar Azevedo de Faveri提供)对我有用,但是在设置中堵塞绝对路径是不优雅的,特别是考虑到有人可以改变Visual Studio和SDK的安装路径; 我想编写尽可能"正常工作"的代码.

所以我花了一点时间研究VS2017如何生成一个新项目,最终我找到了答案,即当VS2017升级现有的C项目时,它会忘记升级一个关键项目值,并且该值不正确 - Windows SDK版本 - 无法找到标题:

项目属性页面

默认情况下,VS2017仅为Windows 10 UWP SDK安装标头,但它不会在升级到实际安装的SDK版本的任何项目中更改"Windows SDK版本"!升级后我的设置为"8.1",并且没有为Windows 8.1安装标头

因此,如果您要升级现有项目,则必须手动将此设置更改为您实际拥有的任何版本的标头:在我的情况下,这是通过显式添加10.0.14393.0到列表(这是Windows 10的版本号) VS2017附带的UWP SDK标头).

(已安装的版本列表可以在C:\Program Files (x86)\Windows Kits\10\Include文件夹中找到,也可以在附近的类似文件夹中找到.)

  • 通过右键单击解决方案并选择"重新定位解决方案",也可以立即对整个解决方案执行此操作. (2认同)

ima*_*ett 0

#include "stdafx.h"

<...>和include之间有一个众所周知的区别"...":简单地说,前者用于库包含,后者用于本地包含。

您提到您正在四处寻找stdafx.h但在编译器安装中找不到它。这表明:

  1. 你认为stdafx.h是一个库文件(它不是,除非它是某种 MS 特定的扩展名,我对此表示怀疑,尽管它传统上被用作预编译头的默认文件名 -如果你已经制作了一个,你几乎肯定会这样做没有)。

  2. 由于 1.,您还没有创建本地文件stdafx.h,因此此包含指令应该失败。如果没有,那么就发生了一些可疑的事情。


至于你的实际问题,我有一些注释:

  1. <stdio.h>是 C 头文件,而不是 C++ 头文件。如果您从 C++ 文件(扩展名.cpp可能是 MSVC)中包含,那么您应该使用 C++ header <cstdio>。然而,这实际上不应该引起问题。

  2. 无论如何,您没有使用 stdio(至少没有直接使用)。您正在使用 iostream,您已正确包含它。如果该包含是导致错误的原因,那么 iostream 会尝试包含它,但不能包含它,并且您的编译器安装会失败。

  3. 尝试类似的程序:


#include <iostream>
int main() {
    std::cout << "hi" << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我刚刚自己检查了一下,它可以在 Visual Studio 2015 Professional 下正确编译和执行。

如果该程序无法编译,我建议重新安装 Visual Studio。根据我的经验,这通常可以解决这些棘手的设置问题。