289Fermer291
Kevin KoflerLe 13/01/2010 à 23:12
Brunni (./285) :
Oué et c'est tout à fait naturel si tu suis la logique du C++. S'ils ont choisi de faire un namespace pour la librairie standard, c'est peut être discutable (ça a des avantages) mais c'est normal que ça ne compile pas si tu l'omets.Ensuite le .h n'a rien à faire là, si tu lui files un nom de fichier qui n'existe pas, c'est normal qu'il ne le trouve pas.

Voilà, bravo, tu as trouvé les 2 problèmes. smile
Bref je vois pas où tu veux en venir.

Je veux en venir au fait qu'avant la standardisation du C++98, le header était appelé iostream.h et que ce nom se retrouve dans des centaines de tutoriaux, de plus le C++ pré-standard ne proposait pas non plus les namespaces, donc on trouve aussi plein de code exemple qui les oublie.

Un autre problème est que g++ acceptait ce code non-standard pendant longtemps, mais ne l'accepte plus maintenant.

Pour les namespaces, le problème était que la libstdc++ ne gérait pas les namespaces et que donc g++ les ignorait pour faire tourner le code standard. Quand la libstdc++ a été corrigée et ce hack supprimé de g++, ça a fait mal. Mais il y avait toujours un iostream.h de compatibilité qui faisait en gros l'équivalent de #include <iostream> et using namespace std; (mais seulement pour les symboles définies dans iostream), header de compatibilité qui a aussi été supprimé plus récemment.
Sasume (./286) :
Il faut préciser « main(void) » ?

Non. En C++, et contrairement au C, (void) et () sont strictement équivalents. Le C++ ne permet pas les déclarations K&R (où () veut dire "accepte n'importe quoi").