错误C1083:无法打开包含文件:';stdafx.h'; (C++程序设计语言第四版):< /P>
main.cpp错误C1083:无法打开包含文件:';stdafx.h'; (C++程序设计语言第四版):< /P>,c++,visual-studio,visual-studio-2013,stdafx.h,C++,Visual Studio,Visual Studio 2013,Stdafx.h,main.cpp #包括 #包括 #包括 #包括“vector.h” 使用名称空间std; 双平方和(向量&); int _tmain(int argc,_TCHAR*argv[] { 向量v(6); 平方和(v); 返回0; } 双平方和(向量和v) { 双和=0; 对于(int i=0;i!=v.size();++i) 总和+=sqrt(v[i]); 回报金额; } vector.cpp #包括 #包括“vector.h” 向量::向量(int-s) :elem{new double[s]
#包括
#包括
#包括
#包括“vector.h”
使用名称空间std;
双平方和(向量&);
int _tmain(int argc,_TCHAR*argv[]
{
向量v(6);
平方和(v);
返回0;
}
双平方和(向量和v)
{
双和=0;
对于(int i=0;i!=v.size();++i)
总和+=sqrt(v[i]);
回报金额;
}
vector.cpp
#包括
#包括“vector.h”
向量::向量(int-s)
:elem{new double[s]},sz{s}
{
}
double&vector::运算符[](int i)
{
返回元素[i];
}
int vector::size()
{
返回sz;
}
向量h
#包括
类向量{
公众:
向量(int-s);
双重&运算符[](int i);
int size();
私人:
双*元素;
int sz;
};
它给了我这些错误:
我在Windows 7上的Microsoft Visual Studio 2013上运行它。如何修复它?您必须正确理解什么是“stdafx.h”,也称为预编译头。其他问题或维基百科将回答这个问题。在许多情况下,可以避免预编译头,特别是当您的项目很小且依赖性很小时。在您的例子中,可能是从模板项目开始的,它仅用于
\u TCHAR
宏中的Windows.h
然后,在Visual Studio world中,预编译头通常是每个项目的文件,因此:
#include
更改为#include“stdafx.h”
。它应该是一个项目本地文件,而不是在include目录中解析第二:在您自己的头中包含预编译头是不可取的,因为它不会扰乱其他可以将您的代码用作库的源代码的名称空间,所以完全删除它在
vector.h
中的包含,只包含windows.h而不是stdfax,或者创建一个没有模板的干净项目。添加\35;包括“afxwin.h”
在源文件中。它会解决你的问题 有两种解决方案
解决方案一:
1.重新创建项目。创建项目时,确保选中了预编译头(应用程序设置…***不要选中空项目)
解决方案二:
1.在项目中创建stdafx.h和stdafx.cpp
2右键单击project->properties->C/C++->预编译头
3.选择要创建的预编译头(/Yc)
4.重建解决方案
如果遇到任何问题,请向我发送消息。您可以通过添加“$(ProjectDir)”(或stdafx.h所在的任何位置)来解决此问题在Project->Properties->Configuration Properties->C/C++->General->Additional Include目录下列出目录。刚刚通过Visual Studio代码教程,遇到了类似的问题
将
#include“stdafx.h”
替换为#include“pch.h”
,这是预编译头的更新名称。启动项目的正确方式通常是99%的战斗。文件+新+项目,Visual C++,Win32,选择“Win32控制台应用程序”。现在,您有了一个stdafx.h文件,其中包含所有编译器设置,这些设置与使用预编译头功能的方式相同。如果这本书没有引导你走这条路,那么你应该另找一本。但是它可能是这样的。您在头文件vector.h
中定义的所有方法都没有在主可执行文件中找到一个未实现的符号。确保您确实在编译vector.cpp
。在visual studio中:确保vector.cpp
位于“源文件”筛选器中(您将其视为文件夹)。或者将其删除并重新读取到项目中。@ceztko“在您自己的头中包含预编译头是不可取的,因为它不会使可以使用您的代码的其他源的命名空间混乱”。。。你确定吗?每个预编译的头文件都有一次#pragma
,因此只使用第一个,而忽略另一个(如vector.h
),不是吗?嗯,我的头文件中有stdafx.h会导致问题。此时库使用stdafx.h,但使用它的程序不使用,并且库不公开stdafx.h文件。是。这也应该是一个问题。一般来说,我担心stdafx.h公开的内容超出了链接库的实际需要,因此不必要地包含它会污染其他人的命名空间。我建议不要以文本形式包含stdafx.h。您可以通过msvc中的命令行args/FI
执行此操作。这使你可以编译你的应用程序有和没有pch。。。对于clang和gcc,您也可以强制包含。我在“解决方案2”中创建了这些空文件,而在项目属性中->预编译头保留为空-我没有选择创建(/Yc)
。我重建了它,一切都很好。
#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;
}
#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;
}
#include <stdafx.h>
class vector{
public:
vector(int s);
double& operator[](int i);
int size();
private:
double* elem;
int sz;
};