Come compilare il codice sorgente C ++ (errore "iostream.h non trovato")?


20

Non voglio discutere di C ++ o di alcun linguaggio di programmazione! Voglio solo sapere cosa sto facendo di sbagliato con Linux Ubuntu sulla compilazione di helloworld.cpp!

Sto imparando il C ++ quindi i miei passi sono:

apri hello.cpp in vim e scrivi questo

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

Quindi, dopo quello ho provato nel terminale questo

g++ hello.cpp

E l'output è

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

Cosa suggerisci? Qualche utile guida passo passo per me? Grazie!


2
Nel caso in cui qualcuno stia considerando di votare per chiudere questa domanda come fuori tema: questo è davvero un problema specifico della piattaforma, perché il compilatore C ++ più popolare per Windows (Microsoft Visual C ++) accetta questa sintassi, ma la maggior parte degli altri compilatori (incluso g++in Ubuntu) non accettarlo.
Eliah Kagan,

#include <iostream> usando namespace std; int main () {cout << "Ciao mondo"; ritorna 0; } questo può funzionare ...

Risposte:


43

Dovresti usare #include <iostream>, no iostream.h; il modulo .h è molto vecchio e deprecato da anni.

Puoi leggere più di quello che probabilmente vuoi sapere sui moduli .h vs non .h qui: http://members.gamedev.net/sicrane/articles/iostream.html

(Inoltre, dovresti scrivere std::couto avere una riga using namespace std;altrimenti il ​​tuo prossimo errore riguarderà il compilatore che non trova una definizione per cout.)


4
@gabriel C ++ ha una lunga storia, che risale alla metà del 1980. Ora ci sono diversi standard pubblicati, l'ultimo dei quali (C ++ 11) è stato rilasciato all'inizio di quest'anno e quello precedente (quello che tutti i compilatori seguono oggi) risale al 2003 (C ++ 03). La guida che hai collegato sembra essere molto più antica di quella, però, a giudicare dal software del compilatore che menziona (secondo Wikipedia, Borland Turbo C ++ è stato sospeso nel 1994). Se scegli un tutorial seguendo lo standard C ++ 03, il tuo codice funzionerà su qualsiasi distribuzione Linux disponibile oggi.
Riccardo Murri,

1
@gabriel Sembra che la tua domanda abbia già avuto una risposta su StackOverflow: stackoverflow.com/questions/909323/…
Riccardo Murri,

1
Potresti anche aver bisogno di: sudo apt-get install build-essential
david6

2
@ david6: ho installato build-essential ma non ce n'è iostream.hsul mio sistema. In realtà, i file di intestazione C ++ sono installati da libstdc ++ - dev , che è richiesto dal pacchetto del compilatore C ++ g ++ , che a sua volta è richiesto da build-essential . Quindi, no, non è necessario build-essential per compilare semplici programmi C ++; l'installazione del g++pacchetto è sufficiente.
Riccardo Murri,

1
Per andare couta lavorare senza il std::prefisso, using std::cout;è preferibile farlo using namespace std;. Anche più usingistruzioni (senza namespace) sono generalmente migliori, dal momento che non si introducono identificatori dallo stdspazio dei nomi che non si desidera e potrebbero essere in conflitto con i nomi nel proprio programma.
Eliah Kagan,

15

Dovresti cambiare iostream.hin iostream. Stavo anche ricevendo lo stesso errore che stai ricevendo, ma quando sono passato iostream.ha just iostream, ha funzionato correttamente. Forse funzionerebbe anche per te.

In altre parole, cambia la riga che dice:

#include <iostream.h>

Fallo dire invece:

#include <iostream>

I file di intestazione della libreria standard C ++, come definiti nello standard, non hanno .hestensioni.

Come menzionato nella risposta di Riccardo Murri , dovrai anche chiamare coutcon il suo nome completo std::couto avere una di queste due linee (preferibilmente sotto le tue #includedirettive ma sopra il tuo altro codice):

using namespace std;
using std::cout;

Il secondo modo è considerato preferibile, specialmente per progetti di programmazione seri, poiché influisce solo std::cout, piuttosto che includere tutti i nomi nello stdspazio dei nomi (alcuni dei quali potrebbero potenzialmente interferire con i nomi utilizzati nel programma).


Bella risposta. Nel rispondere alla domanda di @ gabriel hai risolto un paio di confusioni secondarie che ho avuto per anni.
isomorfismi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.