Pourquoi std :: cout au lieu de simplement cout?

Je reçois ces messages d’erreur pour tous les cout et endl :

 main.cc:17:5: error: 'cout' was not declared in this scope main.cc:17:5: note: suggested alternative: /usr/include/c++/4.6/iostream:62:18: note: 'std::cout' 

Après avoir suivi la suggestion, tout va bien. Maintenant je suis curieux, pourquoi je devais le faire. Nous avons utilisé C ++ dans les classes auparavant, mais je n’ai jamais eu à écrire un std:: avant l’une de ces commandes. Qu’est-ce qui pourrait être différent sur ce système?

Il semble possible que votre classe utilise C ++ pré-standard. Un moyen facile de savoir, est de regarder vos anciens programmes et de vérifier, voyez-vous:

 #include  

ou

 #include  

Le premier est pré-standard et vous pourrez simplement dire cout par opposition à std::cout sans rien de plus. Vous pouvez obtenir le même comportement en C ++ standard en ajoutant

 using std::cout; 

ou

 using namespace std; 

Juste une idée, de toute façon.

Dans le standard C ++, cout est défini dans le namespace std , vous devez donc dire std::cout ou put

 using namespace std; 

dans votre code pour y accéder.

Cependant, ce n’était pas toujours le cas, et dans le passé, cout n’était que dans l’espace de noms global (ou, plus tard, à la fois au niveau global et std ). Je conclurais donc que vos classes utilisaient un compilateur C ++ plus ancien.

Tout dans la bibliothèque Standard Template / Iostream réside dans le namespace std. Vous avez probablement utilisé:

 using namespace std; 

Dans vos cours, et c’est pourquoi cela a fonctionné.

Vous pouvez utiliser l’espace de noms

http://www.daniweb.com/software-development/cpp/threads/109029/what-its-the-use-of-using-namespace-std

Mais tu pourrais offenser quelqu’un

Pourquoi “using namespace std” est-il considéré comme une mauvaise pratique?

Vous avez probablement using namespace std; avant dans votre code que vous avez fait en classe. Cela dit explicitement au précompilateur de rechercher les symboles dans std , ce qui signifie que vous n’avez pas besoin de std:: . Bien que ce soit une bonne pratique de std::cout au lieu de cout , vous invoquez explicitement std::cout chaque fois. De cette façon, si vous utilisez une autre bibliothèque qui redéfinit cout , vous avez toujours le comportement std::cout plutôt qu’un autre comportement personnalisé.

“std” est un espace de noms utilisé pour STL (Standard Template Library). S’il vous plaît se référer à http://en.wikipedia.org/wiki/Namespace_(computer_science)#C.2B.2B

Vous pouvez soit écrire “use namespace std;” avant d’utiliser des fonctions stl, des variables ou juste inser “std ::” avant eux.

Si vous travaillez dans ROOT, vous n’avez même pas besoin d’écrire #include et d’ using namespace std; Commencez simplement par int filename() .

Cela résoudra le problème.