Comment compiler le code source C ++ (erreur «iostream.h not found»)?

20

Je ne veux pas discuter de C ++ ou de tout langage de programmation! Je veux juste savoir ce que je fais mal avec Linux Ubuntu sur la compilation de helloworld.cpp!

J'apprends le C ++ donc mes étapes sont:

ouvrez hello.cpp dans vim et écrivez ceci

#include <iostream.h>
int main()
{
    cout << "Hello World!\n";`
    return 0;
}

Donc, après cela, j'ai essayé dans le terminal ce

g++ hello.cpp

ET la sortie est

hello.cpp:1:22: fatal error: iostream.h: No such file or directory
compilation terminated.

Que suggérez-vous? Un guide étape par étape utile pour moi? Merci!

Gabriel
la source
2
Dans le cas où quelqu'un envisage de voter pour fermer cette question comme hors sujet: il s'agit vraiment d'un problème spécifique à la plate-forme, car le compilateur C ++ le plus populaire pour Windows (Microsoft Visual C ++) accepte cette syntaxe, mais la plupart des autres compilateurs (y compris g++dans Ubuntu) ne l'acceptez pas.
Eliah Kagan
#include <iostream> utilisant l'espace de noms std; int main () {cout << "Bonjour tout le monde"; retourner 0; } cela peut fonctionner ...

Réponses:

43

Vous devez utiliser #include <iostream>, non iostream.h; le formulaire .h est très ancien et obsolète depuis des années.

Vous pouvez en savoir plus sur ce que vous voulez probablement savoir sur les formulaires .h vs non .h ici: http://members.gamedev.net/sicrane/articles/iostream.html

(De plus, vous devez écrire std::coutou avoir une ligne, using namespace std;sinon votre prochaine erreur concernera le compilateur qui ne trouvera pas de définition pour cout.)

Riccardo Murri
la source
4
@gabriel C ++ a une longue histoire qui remonte au milieu des années 1980. Il existe maintenant plusieurs normes publiées, dont la dernière (C ++ 11) a été publiée plus tôt cette année, et la précédente (celle que tous les compilateurs suivent aujourd'hui) remonte à 2003 (C ++ 03). Le guide que vous avez lié semble être bien plus ancien que cela, à en juger par le logiciel de compilation qu'il mentionne (selon Wikipedia, Borland Turbo C ++ a été abandonné en 1994). Si vous choisissez un tutoriel suivant la norme C ++ 03, votre code fonctionnera sur n'importe quelle distribution Linux disponible aujourd'hui.
Riccardo Murri
1
@gabriel On dirait que votre question a déjà été répondue sur StackOverflow: stackoverflow.com/questions/909323/…
Riccardo Murri
1
Vous pourriez également avoir besoin de: sudo apt-get install build-essential
david6
2
@ david6: J'ai build-essential installé mais il n'y en a pas iostream.hsur mon système. En fait, les fichiers d'en-tête C ++ sont installés par libstdc ++ - dev , qui est requis par le package de compilateur C ++ g ++ , qui à son tour est requis par build-essential . Donc, non, vous n'avez pas besoin de build-essential pour compiler des programmes C ++ simples; l'installation du g++package est suffisante.
Riccardo Murri
1
Pour se mettre coutau travail sans le std::préfixe, il using std::cout;est préférable de using namespace std;. Même plusieurs usinginstructions (sans namespace) sont généralement meilleures, car vous n'apportez pas d'identificateurs de l' stdespace de noms que vous ne voulez pas et peuvent entrer en conflit avec des noms dans votre propre programme.
Eliah Kagan
15

Vous devriez changer iostream.hpour iostream. J'obtenais également la même erreur que vous, mais quand je suis passé iostream.hà juste iostream, cela a fonctionné correctement. Peut-être que cela fonctionnerait aussi pour vous.

En d'autres termes, changez la ligne qui dit:

#include <iostream.h>

Faites-le dire à la place:

#include <iostream>

Les fichiers d'en-tête de bibliothèque standard C ++, tels que définis dans la norme, n'ont pas d' .hextensions.

Comme mentionné dans la réponse de Riccardo Murri , vous devrez également appeler coutpar son nom complet std::coutou avoir l'une de ces deux lignes (de préférence en dessous de vos #includedirectives mais au-dessus de votre autre code):

using namespace std;
using std::cout;

La deuxième façon est considérée comme préférable, en particulier pour les projets de programmation sérieux, car elle n'affecte std::coutque la place de tous les noms dans l' stdespace de noms (dont certains pourraient potentiellement interférer avec les noms utilisés dans votre programme).

Dhruv kaushik
la source
Très bonne réponse. En répondant à la question de @ gabriel, vous avez résolu quelques confusions latérales que j'avais depuis des années.
isomorphismes