[Résolu][C++] Problème avec iostream

Bonjour,

Il y a un problème avec c++ : je veux utiliser iostream. Pour cela je fais :

[code]#include

int main()
{
cout << “Hello world !” << endl;
return 0;
}[/code]

Si je veux compiler ça avec g++ (sous linux) ça me met qu’il ne connait pas “cout” et "endl’.
Si je veux que ca marche soit je dois mettre :
‘include <iostream.h>’ mais là j’ai un joli message mais ca marche.
soit je rajoute 'using namespace std; ’ avant mon main et là miracle ca marche aussi mais sans aucun message d’erreur?

Je voulais savoir à quoi sert cette ligne ? 'using namespace std; ’

C’est que le C n’est pas du C++ (et vice versa) B)

Sinon using namespace std, ca met pour tout le scope en question, les objets contenus dans le namespace std “in scope”, c’est a dire accesible sans les prefixer.

[quote=“GloP, post:2, topic: 32684”]C’est que le C n’est pas du C++ (et vice versa) B)

Sinon using namespace std, ca met pour tout le scope en question, les objets contenus dans le namespace std “in scope”, c’est a dire accesible sans les prefixer.[/quote]

Je veux bien mais pourquoi est ce que c’est la première fois que je dois rajouter 'using namespace std; ’ ? D’habitude (sur d’autres machines) je n’ai jamais eu à mettre cette phrase. Comment est ce possible ?

Ben c’est pas normal. Tout ce qui fait partie la lib C++ est dans le namespace std:: sauf si on utilise les headers C++ en .h (<iostream.h> (caca) au lieu de (bien)) qui sont des versions obsolètes existant uniquement pour raisons de compatibilité avec de vieux compilateurs, et qui mettent tout dans le scope global.

Parce que certains environnements de dev se croient malin en incluant la directive using namespace std dans un .h de “haut niveau” B) (genre un fichier toujours inclu). Evidemment, c’est complètement nawak et ça génère potentiellement des conflits d’accès à certaines classes qui seraient réparties sur différents namespace. Bref, c’est de la grosse daube de mettre à plat systématiquement le namespace std ainsi que de l’inclure dans un fichier d’en-tête (scope bcp trop large).

Pas de panique, c’est juste les conventions des g++ récents.
Ca bouge pas mal, depuis quelques temps du moins…

les namespaces sont là pour une bonne raison, et pas pour les mettre tous à plat dès le début.

std::cout, std::endl plutôt.