nathan_g a écrit :
En fait les commandes cout , endl ... devraient s'écrire std::cout et std::endl. La ligne "using namespace std" permet de raccourcir ces commandes en signifiant qu'elles sont du même type. C'est ça ?
|
En C++, tu as des namespaces (package/librairies/nom de domaine, enfin tu vois le genre).
Le fichier <fstream> est défini comme:
namespace std {
#include <fstream.h>
}
Donc, si tu utilises fstream (ce qui est largement recommandé), plutôt que fstream.h (qui est là pour la compatibilité ascendante), alors tes variables/types/méthodes seront définies dans le namespace std uniquement.
Pour t'en servir, tu as alors 3 choix possibles:
1. incorporer tout std, avec la ligne:
using namespace std;
2. incorporer uniquement cout avec:
using std::cout;
3: préciser à chaque fois que tu veux spécifiquement le cout de std:
std::cout << "Hello" << std::endl;
Ton code actuel fonctionne parce que tu utilises le vieux header, et donc tu n'as pas besoin d'incorporer std. Quand je dis incorporer std, cela signifie que tu indiques au compilo que tout ce qui se trouve dans std doit désormais être accessible depuis le namespace global (celui par défaut).
Enfin, pour n'utiliser que cout, etc. Pas besoin de <fstream> : tu devrais en fait inclure <iostream>
Et pour finir, ce que tu disais est globalement vrai:
Code :
- #include <iostream>
- // par défaut, on est dans le namespace global
- std::string endl = "GlobalEndl";
- namespace toto {
- std::string endl = "TotoEndl";
- }
- int main() {
- std::cout << endl << " " << toto::endl << std::endl;
- return 0;
- }
|
Ceci devrait fonctionner et afficher "GlobalEndl TotoEndl".