¿Cómo compilar el código fuente de C ++ (error "iostream.h no encontrado")?

20

¡No quiero discutir sobre C ++ o cualquier lenguaje de programación! ¡Solo quiero saber qué estoy haciendo mal con Linux ubuntu sobre la compilación de helloworld.cpp!

Estoy aprendiendo C ++, así que mis pasos son:

abra hello.cpp en vim y escriba esto

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

Entonces, después de eso intenté en la terminal esto

g++ hello.cpp

Y la salida es

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

¿Que sugieres? ¿Alguna guía útil paso a paso para mí? ¡Gracias!

gabriel
fuente
2
En caso de que alguien esté considerando votar para cerrar esta pregunta como fuera de tema: esto realmente es un problema específico de la plataforma, porque el compilador de C ++ más popular para Windows (Microsoft Visual C ++) acepta esta sintaxis, pero la mayoría de los otros compiladores (incluso g++en Ubuntu) no lo aceptes
Eliah Kagan
#include <iostream> usando el espacio de nombres estándar; int main () {cout << "Hola mundo"; devuelve 0; } esto puede funcionar ...

Respuestas:

43

Deberías usar #include <iostream>, no iostream.h; la forma .h es muy antigua y obsoleta desde hace años.

Puede leer más de lo que probablemente quiera saber en los formularios .h vs no .h aquí: http://members.gamedev.net/sicrane/articles/iostream.html

(Además, debe escribir std::couto tener una línea; de lo using namespace std;contrario, su próximo error será sobre el compilador que no encuentra una definición cout).

Riccardo Murri
fuente
44
@gabriel C ++ tiene una larga historia, que data de mediados de 1980. Ahora hay varios estándares publicados, el último (C ++ 11) se lanzó a principios de este año, y el anterior (el que todos los compiladores siguen hoy) data de 2003 (C ++ 03). Sin embargo, la guía que vinculó parece ser mucho más antigua que eso, a juzgar por el software del compilador que menciona (según Wikipedia, Borland Turbo C ++ se suspendió en 1994). Si elige un tutorial que siga el estándar C ++ 03, su código funcionará en cualquier distribución de Linux disponible hoy.
Riccardo Murri
1
@gabriel Parece que su pregunta ya ha sido respondida en StackOverflow: stackoverflow.com/questions/909323/…
Riccardo Murri
1
También puede necesitar: sudo apt-get install build-essential
david6
2
@ david6: tengo instalado build-essential pero no hay ninguno iostream.hen mi sistema. En realidad, los archivos de encabezado de C ++ son instalados por libstdc ++ - dev , que es requerido por el paquete del compilador de C ++ g ++ , que a su vez es requerido por build-essential . Entonces, no, no necesita build-essential para compilar programas simples de C ++; Instalar el g++paquete es suficiente.
Riccardo Murri
1
Para llegar coutal trabajo sin el std::prefijo, using std::cout;es preferible using namespace std;. Incluso las usingdeclaraciones múltiples (sin namespace) son generalmente mejores, ya que no trae identificadores del stdespacio de nombres que no desea y puede entrar en conflicto con los nombres en su propio programa.
Eliah Kagan
15

Deberías cambiarte iostream.ha iostream. También recibí el mismo error que tú, pero cuando cambié iostream.ha solo iostream, funcionó correctamente. Tal vez funcione para ti también.

En otras palabras, cambie la línea que dice:

#include <iostream.h>

Haz que diga esto en su lugar:

#include <iostream>

Los archivos de encabezado de la biblioteca estándar de C ++, como se define en el estándar, no tienen .hextensiones.

Como se mencionó en la respuesta de Riccardo Murri , también deberá llamar coutpor su nombre completo std::couto tener una de estas dos líneas (preferiblemente debajo de sus #includedirectivas pero sobre su otro código):

using namespace std;
using std::cout;

La segunda forma se considera preferible, especialmente para proyectos de programación serios, ya que solo afecta std::cout, en lugar de incluir todos los nombres en el stdespacio de nombres (algunos de los cuales podrían interferir potencialmente con los nombres utilizados en su programa).

Dhruv kaushik
fuente
Gran respuesta. Al responder la pregunta de @ gabriel, resolvió un par de confusiones paralelas que he tenido durante años.
isomorfismos