web-dev-qa-db-fra.com

Erreur C1083: Impossible d'ouvrir le fichier d'inclusion: 'stdafx.h'

Quand j'ai compilé ce programme (à partir de la 4ème édition du langage de programmation C++):

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

Cela m'a donné ces erreurs:

errors

Je l'exécute sous Microsoft Visual Studio 2013, sous Windows 7. Comment résoudre ce problème?

9
Kulis

Vous devez bien comprendre ce qu'est un "stdafx.h", en-tête précompilé. D'autres questions ou Wikipedia répondront à cela. Dans de nombreux cas, un en-tête précompilé peut être évité, en particulier si votre projet est petit et comporte peu de dépendances. Dans votre cas, comme vous avez probablement commencé à partir d'un projet de modèle, il était utilisé pour inclure Windows.h uniquement pour la macro _TCHAR.

Ensuite, l'en-tête précompilé est généralement un fichier par projet dans le monde de Visual Studio. Par conséquent:

  1. Assurez-vous d'avoir le fichier "stdafx.h" dans votre projet. Si vous ne l'avez pas supprimé (par exemple, vous l'avez supprimé), créez simplement un nouveau projet temporaire et copiez celui par défaut à partir de là.
  2. Changez le #include <stdafx.h> en #include "stdafx.h". Il est supposé être un fichier local du projet et ne pas être résolu dans les répertoires d’inclusion.

Deuxièmement: il est déconseillé d'inclure l'en-tête précompilé dans vos propres en-têtes, afin de ne pas encombrer l'espace de noms d'une autre source pouvant utiliser votre code en tant que bibliothèque; supprimez donc complètement son inclusion dans vector.h.

14
ceztko

Incluez simplement windows.h au lieu de stdfax ou créez un projet propre sans modèle.

7
user3718058

Il y a deux solutions pour cela.

Solution numéro un: 1.Recreate le projet. Lors de la création d'un projet, assurez-vous que l'en-tête précompilé est coché (Paramètres de l'application ... *** Ne cochez pas le projet vide).

Solution numéro deux: 1.Créez stdafx.h et stdafx.cpp dans votre projet 2 Faites un clic droit sur projet -> propriétés -> C/C++ -> En-têtes précompilés. (/Yc)4.Rebuild la solution

Laissez-moi un message si vous rencontrez un problème.

6
Dila Gurung

Ajoutez #include "afxwin.h" dans votre fichier source. Cela résoudra votre problème. 

2
Dila Gurung

Vous pouvez résoudre ce problème en ajoutant "$ (ProjectDir)" (ou où que se trouve le fichier stdafx.h) à la liste des répertoires sous Projet-> Propriétés-> Propriétés de configuration-> C/C++ -> Général-> Répertoires d'inclusion supplémentaires.

0
Sar Jag