2009-07-19 8 views
2

Y a-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++.Compilation des différences dans les environnements Visual C++ et * nix

La raison pour laquelle je demande est que j'ai soumis un morceau de code compilé en g ++, à refactormycode.com. Puis, après un refactoring, il a semblé inclure un "stdafx.h", donc j'ai pensé que je téléchargerais Visual C++ 2008 Express mais je n'arrive pas à le construire. Ce que je fais est de créer un nouveau projet> Créer une application de console Win32, et en remplaçant le .cpp auto-généré avec le code refactorisé. Est-ce que je fais quelque chose de mal ici?

Ce sont les erreurs du compilateur que je reçois:

------ 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 : '<' 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(41) : error C2238: unexpected token(s) preceding ';' 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(83) : 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(83) : error C2143: syntax error : missing ';' before '&' 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(84) : 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(86) : warning C4183: 'getVertices': missing return type; assumed to be a member function returning 'int' 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(89) : error C2146: syntax error : missing ';' before identifier 'm_vertices' 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(89) : 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(89) : 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(43) : error C2758: 'Graph::Vertices' : must be initialized in constructor base/member initializer list 
     c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(83) : see declaration of 'Graph::Vertices' 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(55) : error C2065: 'm_vertices' : undeclared identifier 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(55) : error C2228: left of '.insert' must have class/struct/union 
     type is ''unknown-type'' 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(61) : error C2065: 'VertexIterator' : undeclared identifier 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(61) : error C2146: syntax error : missing ';' before identifier 'iter' 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(61) : error C2065: 'iter' : undeclared identifier 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(62) : error C2065: 'iter' : undeclared identifier 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(62) : error C2065: 'm_vertices' : undeclared identifier 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(62) : 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(62) : error C2065: 'iter' : undeclared identifier 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(62) : error C2065: 'm_vertices' : undeclared identifier 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(62) : 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(62) : error C2065: 'iter' : undeclared identifier 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(64) : error C2065: 'iter' : undeclared identifier 
c:\users\admin\documents\visual studio 2008\projects\alg\bfs\bfs\bfs.cpp(64) : error C2227: left of '->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 ========== 
+0

Pourquoi avez-vous mis '*' au lieu de 'U' dans le mot 'Unix'? –

+1

@Kamran: c'est un moyen courant de désigner "tout dérivé d'Unix" tel que Linux, BSD ou OSX – jalf

Répondre

0

Le code est refondus manque certain comprend. 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 inclusions suivantes au fichier bfs.cpp, entre "stdafx".h » et inclure la déclaration "using":

#include "stdafx.h" 

#include <set> 
#include <list> 
#include <map> 
#include <queue> 
#include <iostream> 


using namespace std; 
 
Compiling... 
bfs - 0 error(s), 0 warning(s) 
+0

Oui, c'était le problème. L'en-tête "set" n'était pas inclus. Malheureusement, cette question s'est transformée en un "help me debug", un type de question que je ne voulais pas intentionnellement transformer en question. Mes excuses. – Steve

0

Peut-être essayer:

#include <stdafx.h> // note angle brackets 

Ceci est différent de la page que vous chaînées, qui recherche stdafx.h dans le répertoire courant .


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

+0

Les parenthèses inclinées ne fonctionnaient pas et mon original non plus ne l'incluait pas. Il se plaint qu'il ne peut même pas trouver l'espace de noms std! J'ai ajouté mes erreurs de compilateur aux questions. Cela devrait le rendre plus descriptif. – Steve

2

Les friandises du compilateur Visual C++ incluent des directives pour les en-têtes précompilés d'une manière spéciale, et souvent elles sont appelées 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, quel que soit l'emplacement de l'en-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 devez définir le chemin d'inclusion du projet de manière appropriée afin que chaque #include associé au préprocesseur puisse trouver le fichier approprié.

Normalement, lorsqu'un fichier inclus se trouve dans un dossier inconnu spécifié que par un compilateur [-I] directive, l'include est écrit que:

#include <filename.h> 

Malheureusement, Visual C++ ne vous permet pas d'utiliser cette notation pour l'en-tête précompilé, et vous devez compter sur GCC en suivant les chemins d'inclusion même pour les fichiers spécifiés avec "" (guillemets doubles). Ce comportement peut ou ne peut pas être dans la norme C++, mais la chose que vous voulez vous assurer est que vous n'avez aucun fichier supplémentaire/inattendu stdafx.h dans l'arborescence source, ou vous pouvez rencontrer encore plus inattendu compilé différences de code entre VC++ et GCC.

3

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

#include <iostream> 
#include <limits> 
#include <map> 
#include <list> 
#include <queue> 
+0

On dirait que c'est la solution la plus probable. Vous pouvez aussi essayer de supprimer stdafx.h inclut et compiler avec g ++. – Darryl

0

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

Nouveau Projet-> Projet vide

Puis,

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

Il est différent de Win32 Console Applica tion.

Questions connexes