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?
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.
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.
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é.
Vous pouvez utiliser l'espace de noms
Mais vous pourriez offenser quelqu'un
Pourquoi "using namespace std" est-il considéré comme une mauvaise pratique?
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é.
"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.