18

当我编译这个程序时(来自 C++ 编程语言第 4 版):

主文件

#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;
}

向量.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;
}

矢量.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 上运行它。如何修复它?

4

6 回答 6

20

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

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

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

其次:不建议将预编译的头文件包含在您自己的头文件中,以免将您的代码用作库的其他源的名称空间混乱,因此将其包含在vector.h.

于 2014-10-12T21:42:08.757 回答
10

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

于 2014-10-12T22:05:26.380 回答
8

有两种解决方案。

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

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

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

于 2016-06-11T06:51:22.220 回答
5

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

于 2018-09-13T15:46:45.727 回答
3

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

于 2015-06-29T10:29:26.613 回答
1

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

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

于 2018-12-26T13:07:39.610 回答