Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1512 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [Resolu] namespace std n'existe pas

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Resolu] namespace std n'existe pas

n°1958694
greenzephy​r
Posté le 19-01-2010 à 11:12:15  profilanswer
 

Salut
 
Je travaille sous Visual Studio C++ 2008 et je dois faire le portage de code c++ compilé avec GCC.
 
Dans mes sources, j'ai typiquement le code suivant:

Code :
  1. using namespace std;
  2. #include <string>

.
 
Cependant à compilation, j'ai :

Erreur 1 error C2871: 'std' : un espace de noms avec ce nom n'existe pas c:\XXXXX 95 StaticLib


 
J'ai essayé de mettre le répertoire C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ dans différents propriétés du projet :

  • C/C++ / Général / Autres répertoires include
  • C/C++ / Général / Résolution des références #using

 
Mais ca compile toujours pas.
 
SVP, pourriez-vous m'aider ?
Y a-t-il une propriété du projet pour indiquer le chemin vers la lib std ???
 
Merci de votre aide


Message édité par greenzephyr le 19-01-2010 à 14:46:26
mood
Publicité
Posté le 19-01-2010 à 11:12:15  profilanswer
 

n°1958697
Un Program​meur
Posté le 19-01-2010 à 11:19:22  profilanswer
 

Inverse les deux lignes...


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1958699
greenzephy​r
Posté le 19-01-2010 à 11:24:47  profilanswer
 

Un Programmeur a écrit :

Inverse les deux lignes...


 
Tout con.... ca marche.
Mais y a-t-il une explication a

n°1958700
greenzephy​r
Posté le 19-01-2010 à 11:26:08  profilanswer
 

Un Programmeur a écrit :

Inverse les deux lignes...


 
Tout con.... ca marche.
Mais y a-t-il une explication au fait que ca passe avec gcc et pas avec le compilo VS ???
J'aimerai bien comprendre car j'ai pas envi de me taper tous les headers à modifier :(
 
merci du coup de main

n°1958702
theshockwa​ve
I work at a firm named Koslow
Posté le 19-01-2010 à 11:31:13  profilanswer
 

greenzephyr a écrit :


 
Tout con.... ca marche.
Mais y a-t-il une explication au fait que ca passe avec gcc et pas avec le compilo VS ???
J'aimerai bien comprendre car j'ai pas envi de me taper tous les headers à modifier :(
 
merci du coup de main


 
PArce qu'en plus, tu mets des using namespace dans tes headers ?  [:pingouino]


---------------
last.fm
n°1958704
Un Program​meur
Posté le 19-01-2010 à 11:36:12  profilanswer
 

A mon avis, c'est un bug de gcc.  Une directive using a un nom de namespace comme "argument" et donc il faut que ce nom soit connu comme un nom de namespace.  (En passant gcc donne une erreur pour un autre namespace que std).
 
Toujours en passant, moi j'eviterais les directives using, et je suis activement contre leur usage dans les en-tetes.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1958706
greenzephy​r
Posté le 19-01-2010 à 11:36:25  profilanswer
 

theshockwave a écrit :


 
PArce qu'en plus, tu mets des using namespace dans tes headers ?  [:pingouino]


Ben, je fais que reprendre du code qu'on me file.
Dans les classes déclarées dans les headers, il y a des fonctions qui retournent des string par exemple...

Message cité 1 fois
Message édité par greenzephyr le 19-01-2010 à 11:39:45
n°1958709
Joel F
Real men use unique_ptr
Posté le 19-01-2010 à 11:40:36  profilanswer
 

Les namespaces sont des entités définies comme les autres, ils n'existent pas ex nihilo.
 
 [:joel f:1]  
 * on n'utilise jamais un using global dans un .h vu qu'il va contaminer toutes les TUs dans lequel il va etre inclus.

n°1958711
theshockwa​ve
I work at a firm named Koslow
Posté le 19-01-2010 à 11:44:48  profilanswer
 

greenzephyr a écrit :


Ben, je fais que reprendre du code qu'on me file.
Dans les classes déclarées dans les headers, il y a des fonctions qui retournent des string par exemple...


 
Et bien même si ce n'est pas de ton fait, c'est une très mauvaise pratique. Ta fonction peut tout à fait retourner une std::string sans faire de using. Les using dans les headers vont just dans le sens contraire de ce pour quoi les namespaces sont faits et tu vas te retrouver avec des collisions de noms ... Bref, ca mériterait une passe de nettoyage


---------------
last.fm
n°1958712
greenzephy​r
Posté le 19-01-2010 à 11:44:49  profilanswer
 

Bon en gros tout le monde est en train de me dire que je dois me palucher tous les headers qu'on me file pour virer les using namespace std; ....
 :(  :(  :(

 

pas cool... et c'est juste le début du portage (537 erreurs / 2107 avertissements)

 

M'enfin je suis d'accord avec vous et je comprends pas pourquoi c'est comme ca dans le code... en plus le mec qui a codé n'est pourtant pas manchot en codage C++
.. à moins que lui aussi est repris ces bouts de code de qq'un d'autre...

Message cité 1 fois
Message édité par greenzephyr le 19-01-2010 à 11:47:13
mood
Publicité
Posté le 19-01-2010 à 11:44:49  profilanswer
 

n°1958716
greenzephy​r
Posté le 19-01-2010 à 11:50:51  profilanswer
 

greenzephyr a écrit :

Bon en gros tout le monde est en train de me dire que je dois me palucher tous les headers qu'on me file pour virer les using namespace std; ....
 :(  :(  :(  
 
pas cool... et c'est juste le début du portage (537 erreurs / 2107 avertissements)
 
M'enfin je suis d'accord avec vous et je comprends pas pourquoi c'est comme ca dans le code... en plus le mec qui a codé n'est pourtant pas manchot en codage C++  
.. à moins que lui aussi est repris ces bouts de code de qq'un d'autre...


 
Pour préciser et être plus juste tout de même, je peux déactiver les using namespace car il est à l'intérfieur d'une directive conditionnelle de compilation:

Code :
  1. #if HAVE_NAMESPACES
  2. using namespace std;
  3. #endif


Suffit que je mette HAVE_NAMESPACES à 0 mais dans ce cas là, les types string ne seront plus reconnus...donc le problème est le même... faut mettre des std::string partout

n°1958719
theshockwa​ve
I work at a firm named Koslow
Posté le 19-01-2010 à 12:03:28  profilanswer
 

c'est le genre de remplacement qui se fait assez simplement à coup de regexp sur tes headers.
 
Ensuite, tu mets tes using namespace dans tes fichiers cpp si ca te chante.
 
J'ai du mal à voir dans quel cas une telle directive peut-être utile. Ce serait pour un compilateur C++ qui ne supporterait pas les namespaces ?


---------------
last.fm
n°1958720
greenzephy​r
Posté le 19-01-2010 à 12:06:45  profilanswer
 

theshockwave a écrit :

c'est le genre de remplacement qui se fait assez simplement à coup de regexp sur tes headers.
Ensuite, tu mets tes using namespace dans tes fichiers cpp si ca te chante.


 
Ouep ! C'est en cours.... plus que 323 erreurs ...

theshockwave a écrit :


J'ai du mal à voir dans quel cas une telle directive peut-être utile. Ce serait pour un compilateur C++ qui ne supporterait pas les namespaces ?


Pareil pour moi ... comprends pas ...
 
merci bcp pour votre aide et vos conseils
 
a très bientôt  
(avec 300 erreurs et 2000 warning, vous allez surement me revoir sur le fofo  :sarcastic:  

n°1958730
Joel F
Real men use unique_ptr
Posté le 19-01-2010 à 13:28:21  profilanswer
 

les vieux comeau, les vieux compilateurs sun et gcc avant 2.95 en les supportaient pas. Mais bon si on doit maintenir ces archaismes pr des compilosaures, on est pas sorti ...

n°1958734
Un Program​meur
Posté le 19-01-2010 à 13:41:00  profilanswer
 

greenzephyr a écrit :


 
Pour préciser et être plus juste tout de même, je peux déactiver les using namespace car il est à l'intérfieur d'une directive conditionnelle de compilation:

Code :
  1. #if HAVE_NAMESPACES
  2. using namespace std;
  3. #endif


Suffit que je mette HAVE_NAMESPACES à 0 mais dans ce cas là, les types string ne seront plus reconnus...donc le problème est le même... faut mettre des std::string partout


 
C'est le genre de choses qu'on rencontre parce qu'elles ont été utiles il y a un certain nombres de transitions.  Elles ne le sont plus maintenant et je parie que le code ne compile de toute façon plus sur aucun compilateur ou elles ont été utiles.  On essaie normalement de nettoyer petit a petit, mais on en hérite parfois... C'est ton cas mais tu m'as l'air de récupérer cela dans une excellente contexte pour faire le nettoyage de suite.
 
Je sais, c'est le genre de nettoyage qui est assez difficile a vendre a partir d'un certain niveau -- et en prime pas très gai a faire -- mais ça rends la vie tellement plus facile par âpres que ça vaut la peine de se le palucher, quitte a l'agglomérer avec des choses qui passent mieux (chose qu'un bon manager d'un niveau en dessous de celui qui n'en comprends pas l'utilité fait naturellement).
 


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1958741
Joel F
Real men use unique_ptr
Posté le 19-01-2010 à 13:56:42  profilanswer
 

greenzephyr a écrit :


(avec 300 erreurs et 2000 warning, vous allez surement me revoir sur le fofo  :sarcastic:  


 
je conseil l'option "stop on first error" dans des cas comme ça.

n°1958753
greenzephy​r
Posté le 19-01-2010 à 14:25:39  profilanswer
 

Joel F a écrit :


 
je conseil l'option "stop on first error" dans des cas comme ça.


 
Merci du conseil , je vais regarder pour cette option.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [Resolu] namespace std n'existe pas

 

Sujets relatifs
[Résolu] boucle for ne retient que la dernière ligne du fichier[Résolu] [VBA] Multiplication fausse
[RESOLU] Problème d'affichage d'une deuxième fenêtre[Résolu] [Powershell] [LDAP] un Search sur une sous-OU ?
[résolu]comment faire pour que les cell de 2 tables ont la même taille[résolu] Police qui s'affiche différemment selon les 2 navigateurs
[résolu] Probleme alignement menu sous Firefox[Resolu] Génération de projet Visual Studio avec CMake
[Résolu] Word macro qui ouvre un document 
Plus de sujets relatifs à : [Resolu] namespace std n'existe pas


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR