Compilation des différences dans les environnements Visual C ++ et * nix

Existe-t-il une différence entre la compilation de projets dans des environnements * nix et MS Visual C ++? Par exemple, il existe un fichier “stdafx.h” dans Visual C ++.

La raison pour laquelle je pose la question est que j’ai envoyé un morceau de code compilé en g ++ à refactormycode.com . Ensuite, après avoir obtenu un refactoring, il semblait inclure un “stdafx.h”, alors je me suis dit que je téléchargerais Visual C ++ 2008 Express mais je n’arrive pas à le faire construire.

Ce que je fais, c’est créer un nouveau projet> Créer une application console Win32 et remplacer le fichier .cpp généré automatiquement par le code refactorisé. Est-ce que je fais quelque chose de mal ici?

Voici les erreurs du compilateur que j’obtiens:

------ Build started: Project: bfs, Configuration: Debug Win32 ------ Compiling... bfs.cpp c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(3) : error C2871: 'std' : a namespace with this name does not exist c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(8) : error C2143: syntax error : missing ';' before '<' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(8) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(8) : error C2238: unexpected token(s) preceding ';' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(25) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(25) : error C2143: syntax error : missing ';' before '&' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(26) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(28) : warning C4183: 'getEdges': missing return type; assumed to be a member function returning 'int' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(32) : error C2059: syntax error : '<' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(32) : error C2238: unexpected token(s) preceding ';' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(12) : error C2758: 'Vertex::Edges' : must be initialized in constructor base/member initializer list c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(25) : see declaration of 'Vertex::Edges' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(22) : error C2065: 'm_edges' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(22) : error C2228: left of '.push_back' must have class/struct/union type is ''unknown-type'' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(27) : error C2065: 'm_edges' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(38) : error C2143: syntax error : missing ';' before '<' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(38) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(38) : error C2039: 'iterator' : is not a member of '`global namespace'' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(38) : error C2238: unexpected token(s) preceding ';' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(41) : error C2059: syntax error : 'getId' must point to class/struct/union/generic type type is ''unknown-type'' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(65) : error C2065: 'iter' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(78) : error C2065: 'VertexIterator' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(78) : error C2146: syntax error : missing ';' before identifier 'iter' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(78) : error C2065: 'iter' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(79) : error C2065: 'iter' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(79) : error C2065: 'm_vertices' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(79) : error C2228: left of '.begin' must have class/struct/union type is ''unknown-type'' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(79) : error C2065: 'iter' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(79) : error C2065: 'm_vertices' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(79) : error C2228: left of '.end' must have class/struct/union type is ''unknown-type'' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(79) : error C2065: 'iter' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(80) : error C2065: 'iter' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(80) : error C2541: 'delete' : cannot delete objects that are not pointers c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(85) : error C2065: 'm_vertices' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(119) : error C2143: syntax error : missing ';' before '<' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(119) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(119) : error C2238: unexpected token(s) preceding ';' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(106) : error C2065: 'UINT_MAX' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(138) : error C2065: 'queue' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(138) : error C2059: syntax error : 'const' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(140) : error C2065: 'Attributes' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(142) : error C2065: 'q' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(142) : error C2228: left of '.push' must have class/struct/union type is ''unknown-type'' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(143) : error C2065: 'q' : undeclared identifier c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(143) : error C2228: left of '.empty' must have class/struct/union type is ''unknown-type'' c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(143) : fatal error C1903: unable to recover from previous error(s); stopping compilation Build log was saved at "file://c:\Users\Admin\Documents\Visual Studio 2008\Projects\alg\bfs\bfs\Debug\BuildLog.htm" bfs - 66 error(s), 2 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Le code refactored manque de certaines inclusions. Plus que probablement, ils sont inclus dans l’en-tête précompilé, stdafx.h, ce qui n’est généralement pas une bonne idée. Ajoutez les éléments suivants au fichier bfs.cpp, entre l’inclusion de “stdafx.h” et la déclaration “using”:

 #include "stdafx.h" #include  #include  #include  #include  #include  using namespace std; 
 Comstackr ...
 bfs - 0 erreur (s), 0 avertissement (s)

Ajouter les en-têtes ci-dessous dans le code refactored,

 #include  #include  #include  #include  #include  

Le compilateur Visual C ++ traite les directives include pour les en-têtes précompilés d’une manière particulière, et elles s’appellent souvent stdafx.h , donc je vais décrire ce traitement et voir si c’est le problème.

Chaque fichier utilisant stdafx.h comme en-tête précompilé aura cette ligne en haut.

 #include "stdafx.h" 

Normalement, cela signifie que le compilateur recherche stdafx.h dans le même dossier source que le fichier qui l’a inclus. Toutefois, lorsque stdafx.h est l’en-tête précompilé, le compilateur Visual C ++ inclut automatiquement la sortie précompilée stdafx.h du projet, indépendamment de l’ stdafx.h tête stdafx.h ou de la sortie. Lorsque le même projet est compilé sous GCC, GCC ne saura pas où se trouve le fichier s’il se trouve dans un autre dossier. Vous devrez définir le chemin d’inclusion du projet de manière à ce que chaque #include lié au préprocesseur puisse trouver le fichier approprié.

Normalement, lorsqu’un fichier include se trouve dans un dossier inconnu spécifié uniquement par une directive compilateur [ -I ], l’inclusion est écrite comme suit:

 #include  

Malheureusement, Visual C ++ ne vous permet pas d’utiliser cette notation pour l’en-tête précompilé et vous devez vous baser sur GCC en suivant les chemins d’inclusion même pour les fichiers spécifiés par “” (guillemets doubles). Ce comportement peut être ou ne pas être dans la norme C ++, mais vous devez vous assurer que vous n’avez pas de fichiers stdafx.h supplémentaires / involontaires dans l’arborescence source, ou que vous risquez de rencontrer encore plus de stdafx.h . différences de code compilées inattendues entre VC ++ et GCC.

Peut-être essayer:

 #include  // note angle brackets 

Ceci est différent de la page que vous avez liée, qui recherche stdafx.h dans le répertoire en cours.


Ou avez-vous essayé de remplacer cela par les #includes dans le fichier d’origine?

Pour créer un nouveau projet, je recommande ceci:

Nouveau projet-> Projet vide

Alors,

Projet-> Ajouter un nouvel élément …-> Fichier C ++ (.cpp)

C’est différent de l’application console Win32.