错误 C1083:无法打开包含文件:“stdafx.h”
Posted
技术标签:
【中文标题】错误 C1083:无法打开包含文件:“stdafx.h”【英文标题】:Error C1083: Cannot open include file: 'stdafx.h' 【发布时间】:2014-10-12 21:28:18 【问题描述】:当我编译这个程序时(来自 C++ Programming Language 第 4 版):
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 <stdafx.h>
更改为#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 中没有此类文件或目录
致命错误 C1083:无法打开包含文件:'io.h':没有这样的文件或目录
致命错误 C1083:无法打开包含文件:“openssl/opensslv.h”