web-dev-qa-db-fra.com

Pourquoi std :: cout au lieu de simplement cout?

Je reçois ces messages d'erreur pour tous 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 de savoir pourquoi je devais le faire. Nous avions déjà utilisé le C++ dans les classes, 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?

59
erikbwork

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

#include <iostream.h>

ou

#include <iostream>

Le premier est pré-standard, et vous pourrez simplement dire cout plutôt que std::cout sans rien d’autre. Vous pouvez obtenir le même comportement en C++ standard en ajoutant

using std::cout;

ou

using namespace std;

Juste une idée, en tout cas.

119
FatalError

Dans la norme C++, cout est défini dans l'espace de noms std. Vous devez donc dire std::cout ou mis

using namespace std;

dans votre code afin de l'obtenir.

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

24
Matthew Walton

Tout ce qui se trouve dans la bibliothèque de modèles standard/Iostream réside dans l'espace de noms std. Vous avez probablement utilisé:

using namespace std;

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

13
mfontanini
6
posttool

Vous avez probablement eu using namespace std; avant dans votre code que vous avez fait en classe. Cela indique explicitement au précompileur 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 appelez donc explicitement std::cout à chaque fois. Ainsi, si vous utilisez une autre bibliothèque qui redéfinit cout, vous avez toujours le fichier std::cout comportement au lieu d'un autre comportement personnalisé.

3
Hans Z

"std" est un espace de noms utilisé pour STL (Standard Template Library). Veuillez vous référer à http://en.wikipedia.org/wiki/Namespace_ (computer_science) # C.2B.2B

Vous pouvez écrire "use namespace std;" avant d’utiliser des fonctions stl, des variables ou simplement d’insérer "std ::" devant eux.

1
Edmund