Когда я скомпилировал эту программу (из 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;
};
Это дало мне эти ошибки:
Я запускаю его в Microsoft Visual Studio 2013, в Windows 7. Как это исправить?
Вы должны правильно понимать, что такое stdafx.h, или предварительно скомпилированный заголовок. Другие вопросы или Википедия ответят на это. Во многих случаях можно избежать предварительно скомпилированного заголовка, особенно если ваш проект небольшой и с небольшими зависимостями. В вашем случае, как вы, вероятно, начали с шаблона проекта, он был использован для включения Windows.h
только для _TCHAR
макро.
Затем предварительно скомпилированный заголовок обычно является файлом проекта в мире Visual Studio, поэтому:
#include <stdafx.h>
в #include "stdafx.h"
, Предполагается, что это локальный файл проекта, который не должен быть разрешен во включаемых каталогах.Во-вторых: нежелательно включать предварительно скомпилированный заголовок в ваши собственные заголовки, чтобы не загромождать пространство имен другого источника, который может использовать ваш код в качестве библиотеки, поэтому полностью удалите его включение в vector.h
,
Просто включите windows.h вместо stdfax или создайте чистый проект без шаблона.
Есть два решения для этого.
Решение номер один:
1. Воссоздать проект. При создании проекта убедитесь, что предварительно скомпилированный заголовок проверен (Настройки приложения … *** Не проверять пустой проект)
Решение номер два:
1. Создайте stdafx.h и stdafx.cpp в своем проекте
2 Щелкните правой кнопкой мыши по проекту -> свойства -> C / C ++ -> предварительно скомпилированные заголовки
3. выберите предварительно скомпилированный заголовок для создания (/ Yc)
4. Восстановите решение
Напишите мне, если у вас возникнут проблемы.
добавлять #include "afxwin.h"
в вашем исходном файле. Это решит вашу проблему.
Вы можете решить эту проблему, добавив «$ (ProjectDir)» (или там, где находится stdafx.h) в список каталогов в разделе «Проект» — «Свойства» -> «Свойства конфигурации» -> «C / C ++ ->« Общие »->« Дополнительные каталоги включения ».
Просто пробежался по учебному коду Visual Studio и столкнулся с похожей проблемой.
замещать #include "stdafx.h"
с #include "pch.h"
это обновленное имя для предварительно скомпилированных заголовков.