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, pourquoi j'ai dû faire ça. Nous avons utilisé C++ dans les classes avant, mais je n'ai jamais eu à écrire un std:: avant l'une de ces commandes. Ce qui pourrait être différent de ce système?

55
demandé sur Tshepang 2012-06-08 17:47:00

7 réponses

il semble possible que votre classe ait pu utiliser du C++Pré-standard. Une façon facile de dire, est de regarder vos anciens programmes et de vérifier, vous voyez:

#include <iostream.h>

ou

#include <iostream>

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

using std::cout;

ou

using namespace std;

juste une idée.

111
répondu FatalError 2012-06-08 13:49:39

dans le standard c++, cout est défini dans le namespace std , donc vous devez dire std::cout ou mettre

using namespace std;

dans votre code pour y arriver.

cependant, ce n'était pas toujours le cas, et dans le passé cout était juste dans l'espace Nam global (ou, plus tard, à la fois global et std ). Je conclurai donc que vos classes ont utilisé un vieux compilateur C++.

24
répondu Matthew Walton 2012-06-08 13:49:12

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

using namespace std;

dans vos cours, et c'est pour ça que ça a marché.

12
répondu mfontanini 2012-06-08 13:48:02

Vous avez probablement eu using namespace std; avant dans votre code, vous n'en classe. Cela indique explicitement au précompilateur de rechercher les symboles dans std , ce qui signifie que vous n'avez pas besoin de std:: . Bien qu'il soit de bonne pratique de std::cout au lieu de cout donc 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 au lieu d'un autre comportement personnalisé.

3
répondu Hans Z 2012-06-08 13:49:48

"std" est un espace de noms utilisé pour la 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" utiliser namespace std; "avant d'utiliser n'importe quelles fonctions stl, variables ou tout simplement inser" std:: "avant eux.

1
répondu Edmund 2012-06-08 13:51:43

si vous travaillez en ROOT, vous n'avez même pas à écrire #include<iostream> et using namespace std; simplement à partir de int filename() .

cela résoudra le problème.

-2
répondu suman deb 2018-04-11 08:13:40