错误 C1083:无法打开包含文件:“stdafx.h”

Posted

技术标签:

【中文标题】错误 C1083:无法打开包含文件:“stdafx.h”【英文标题】:Error C1083: Cannot open include file: 'stdafx.h' 【发布时间】:2014-10-12 21:28:18 【问题描述】:

当我编译这个程序时(来自 C++ Programming Language 4th edition):

main.cpp

#include <stdafx.h>
#include <iostream>
#include <cmath>
#include "vector.h"
using namespace std;

double sqrt_sum(vector&);

int _tmain(int argc, _TCHAR* argv[])

    vector v(6);
    sqrt_sum(v);
    return 0;


double sqrt_sum(vector& v)

    double sum = 0;
    for (int i = 0; i != v.size(); ++i)
        sum += sqrt(v[i]);
    return sum;

vector.cpp

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

vector::vector(int s)
:elem new double[s] , sz s 


double& vector::operator[](int i)

    return elem[i];

int vector::size()

    return sz;

vector.h

#include <stdafx.h>
class vector
public:
    vector(int s);
    double& operator[](int i);
    int size();
private:
    double* elem;
    int sz;
;

它给了我这些错误:

我在 Windows 7 上的 Microsoft Visual Studio 2013 上运行它。如何修复它?

【问题讨论】:

以正确的方式开始您的项目通常是 99% 的战斗。 File + New + Project,Visual C++,Win32,选择“Win32 Console Application”。您现在拥有一个包含所有编译器设置的 stdafx.h 文件,就像使用预编译头文件功能一样。如果这本书没有这样指导你,那么你应该寻找另一本书。但它可能确实如此。 【参考方案1】:

您必须正确理解什么是“stdafx.h”,即预编译头文件。其他问题或***会回答这个问题。在许多情况下,可以避免使用预编译头文件,尤其是在您的项目很小且依赖项很少的情况下。在您的情况下,由于您可能从模板项目开始,它仅用于包含 Windows.h 用于 _TCHAR 宏。

那么,在 Visual Studio 世界中,预编译头文件通常是每个项目的文件,所以:

    确保您的项目中有“stdafx.h”文件。如果您不这样做(例如您将其删除),只需创建一个新的临时项目并从那里复制默认项目即可; 将#include &lt;stdafx.h&gt; 更改为#include "stdafx.h"。它应该是一个项目本地文件,而不是在包含目录中解析。

其次:不建议将预编译的标头包含在您自己的标头中,以免将您的代码用作库的其他源的命名空间混乱,因此将其包含在vector.h 中完全删除。

【讨论】:

您在标头vector.h 中定义的所有方法都没有在主可执行文件中找到已实现的符号。确保你真的在编译vector.cpp。在 Visual Studio 中:确保 vector.cpp 在“源文件”过滤器中(您将其视为文件夹)。或者将其删除并读取到项目中。 @ceztko “不建议将预编译的头文件包含在您自己的头文件中,以免混淆其他可以使用您的代码的源的名称空间”...您确定吗?每个预编译的头文件都有#pragma once,所以只使用第一个而另一个(如vector.h)被忽略,不是吗? 嗯,我遇到了这样一种情况,在我的头文件中包含 stdafx.h 会导致问题。那是一个库使用stdafx.h,但使用它的程序没有,并且stdafx.h文件没有被库公开。 是的。这也应该是一个问题。一般来说,我担心 stdafx.h 暴露的内容比链接库实际需要的要多,因此通过不必要地包含它会污染别人的 else 命名空间。 我建议不要在文本中包含 stdafx.h。您可以通过 msvc 中的命令行参数 /FI 来完成。这允许您在使用和不使用 pch 的情况下编译您的应用程序......对于 clang 和 gcc,您也可以强制包含。【参考方案2】:

只需包含 windows.h 而不是 stdfax 或创建一个没有模板的干净项目。

【讨论】:

【参考方案3】:

有两种解决方案。

解决方案一: 1.重新创建项目。创建项目时确保检查预编译头(应用程序设置... ***不要检查空项目)

解决方案二: 1.在你的项目中创建stdafx.h和stdafx.cpp 2 右键单击​​项目 -> 属性 -> C/C++ -> 预编译头文件 3.选择要创建的预编译头文件(/Yc) 4.重建解决方案

如果您遇到任何问题,请给我留言。

【讨论】:

我在“解决方案二”和Project Properties-> 中创建了那些空文件-> Precompiled Header 留空-我没有选择Create (/Yc)。我重建了它,一切正常。【参考方案4】:

您可以通过将“$(ProjectDir)”(或 stdafx.h 所在的任何位置)添加到 Project->Properties->Configuration Properties->C/C++->General->Additional Include 下的目录列表来解决此问题目录。

【讨论】:

【参考方案5】:

在源文件中添加#include "afxwin.h"。它将解决您的问题。

【讨论】:

【参考方案6】:

刚刚通过 Visual Studio Code 教程运行并遇到了类似的问题。

#include "stdafx.h" 替换为#include "pch.h",这是预编译头文件的更新名称。

【讨论】:

以上是关于错误 C1083:无法打开包含文件:“stdafx.h”的主要内容,如果未能解决你的问题,请参考以下文章

错误 C1083:无法打开包含文件:'stdafx.h':VS 2005 中没有此类文件或目录

为啥“cout”总是给我错误 C1083?

致命错误 C1083:无法打开包含文件:'io.h':没有这样的文件或目录

致命错误 C1083:无法打开包含文件:“openssl/opensslv.h”

错误 C1083:无法打开包含文件:'crtdbg.h':没有这样的文件或目录

“错误 C1083:无法打开包含文件”但我有包含文件的路径