Compilateur LLVM 2.0: Avertissement avec “using namespace std;”
Dans Xcode en utilisant LLVM 2.0, quand j'ai mis la ligne using namespace std;
dans mon code C++, je reçois cet avertissement:
Sémantique Question
L'aide de la directive se réfère implicitement défini par l'espace de noms 'std'
Est-il un moyen de résoudre ce problème? Pourquoi est-il en donnant cet avertissement?
Êtes-vous de mettre cette ligne?
Avez-vous d'inclure les en-têtes qui ont de l'espace de nom?
Xcode 4 est encore sous NDA; vous devriez poser cette question à Apple beta dev forum, c'est le seul forum de la LDN que vous avez conclu avec Apple vous permet de vous demander. (devforums.apple.com/community/xcode4 -- votre apple dev programme de connexion est nécessaire pour la lecture/post)
GCC permet à un fichier
Il ne contiennent des "autres" comprend, par exemple
Avez-vous d'inclure les en-têtes qui ont de l'espace de nom?
Xcode 4 est encore sous NDA; vous devriez poser cette question à Apple beta dev forum, c'est le seul forum de la LDN que vous avez conclu avec Apple vous permet de vous demander. (devforums.apple.com/community/xcode4 -- votre apple dev programme de connexion est nécessaire pour la lecture/post)
GCC permet à un fichier
using namespace std;
, sans aucune norme comprend. Ce n'est pas conforme, donc clang vous avertit.Il ne contiennent des "autres" comprend, par exemple
using namespace std;
et puis #include <iostream>
. L'autre est #include "sqlite3.h"
. La classe est complète, il se produit dans toutes les en-tête C++ je ajouter using namespace std;
.OriginalL'auteur Justin Mrkva | 2010-10-17
Vous devez vous connecter pour publier un commentaire.
Avez-vous inclus tous les fichiers d'en-tête standard? Sinon le compilateur ne connaît pas
namespace std
.Veuillez poster plus de code à préciser.
using namespace std;
a été la première ligne (en plus de l' #ifndef et #define déclarations de cours) dans le fichier, je l'ai déplacé après la ligne#include <iostream>
et il a éliminé l'avertissement. GCC n'a jamais donné cet avertissement, de sorte que je n'ai jamais pensé avant. Merci!OriginalL'auteur Motti
j'ai résolu ce problème, comme cela
OriginalL'auteur balagurubaran
Déplaçant le using namespace std après les #include peut éliminer cet avertissement.
OriginalL'auteur user3362270
Je vois que cette question est assez vieux, mais pour quiconque de vérifier cela dans le futur, je voulais ajouter ce lien à partir de la VERSION de la documentation comme un complément à la discussion et pour nombre d'habitants à la recherche pour plus d'info:
LLVM Normes de Codage: Ne Pas utiliser using namespace std;
Je crois que le titre est assez indicative de pourquoi j'ai partagé pour aider avec cette question.
Edit:
Ainsi, au lieu si vous utilisez " à l'aide d'espace de noms std;' explicitement le type std:: pour tous les cas où vous l'utilisation de la bibliothèque standard. Il évite les conflits avec les fichier source espaces de noms. C'est ce que la citation ci-dessus à partir de l'article conseille.
Je suis au travail, et juste essayer d'aider d'autres personnes dans des situations similaires, en fournissant une information utile qui traite de ce problème précis. Je pense que la réponse ajoute aux réponses déjà fournies. Si c'est problématique, je vais juste prendre vers le bas. Si c'était moi, en posant cette question, je voudrais que quelqu'un a partagé cette déclaration de llvm avec moi.
Je suppose que je suis nouveau sur le style que l'aide est demandé d'être en car pour moi, ce serait utile. Plus précisément, ce que plus pourraient que j'ai ajouté à cette sait pas répondre? Il est prévu que plus d'une suggestion de remplacement pour les réponses déjà postées.
Il est utile pour les gens qui sont de moins en moins fréquentes, mais fuzz pour ceux qui passent beaucoup de temps à interagir avec ces questions, c'est pourquoi les vétérinaires respecter cela. C'est une question de propreté et d'ordre.
OriginalL'auteur GC Saab