当我编译这个程序时(来自C ++编程语言第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上运行它。如何修复它?
答案 0 :(得分:15)
你必须正确理解什么是&#34; stdafx.h&#34;,也就是预编译头。其他问题或维基百科将回答这个问题。在许多情况下,可以避免使用预编译的头文件,尤其是在项目很小且依赖性很小的情况下。在您的情况下,您可能从模板项目开始,它仅用于Windows.h
宏的_TCHAR
。
然后,预编译的头文件通常是Visual Studio世界中的每个项目文件,因此:
#include <stdafx.h>
更改为#include "stdafx.h"
。它应该是一个项目本地文件,不能在include目录中解析。其次:不建议在您自己的标头中包含预编译的标头,以免混淆可以将您的代码用作库的其他源的名称空间,因此请完全删除它在vector.h
中的包含。< / p>
答案 1 :(得分:8)
只需包含windows.h而不是stdfax,或者创建一个没有模板的干净项目。
答案 2 :(得分:6)
有两种解决方案。
第一个解决方案: 1.重新创建项目。创建项目时,请确保选中预编译的标题(应用程序设置... ***不检查空项目)
解决方案二: 1.在项目中创建stdafx.h和stdafx.cpp 2右键单击项目 - &gt;属性 - &gt; C / C ++ - &gt;预编译标题 3.选择预编译头来创建(/ Yc) 4.重建解决方案
如果您遇到任何问题,请给我留言。
答案 3 :(得分:2)
在源文件中添加#include "afxwin.h"
。它将解决您的问题。
答案 4 :(得分:0)
您可以通过在项目->属性->配置属性-> C / C ++->常规->其他包含下的目录列表中添加“ $(ProjectDir)”(或stdafx.h所在的位置)来解决此问题。目录。
答案 5 :(得分:-1)
仅在运行Visual Studio Code教程时就遇到了类似的问题。
将Mto nda I whaecdt Atsr Swra in hte ienamc, ti wsa nfu!
替换为#include "stdafx.h"
,这是预编译标头的更新名称。