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?
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.
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++.
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é.
vous pouvez utiliser l'espace de noms
mais vous pourriez offenser quelqu'un
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é.
"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.
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.