2010-09-13 12 views
8

Estoy tratando de hacer algo en Linux, pero se queja de que no puede encontrar iostream.h. ¿Qué necesito instalar para obtener este archivo?Dónde conseguir iostream.h

+2

Este es un ** error ** en el código que desea usar. Si es posible, debe proporcionar a los mantenedores del proyecto un informe de errores. –

Respuesta

11

El nombre correcto de este encabezado estándar es solo iostream sin una extensión.

Si su compilador todavía no lo encuentra, intente lo siguiente:

find /usr/include -name iostream -type f -print 

... y agregarlo a su ruta de inclusión, a raíz de la documentación de su compilador.

+1

g ++ y cualquier compilador de C++ estándar debería encontrar automáticamente los encabezados de C++ sin necesidad de especificar su ubicación; de hecho, el estándar de C++ permite, en teoría, que "" se resuelva de una manera que en realidad no involucra un archivo llamado "iostream" (es decir, el compilador puede asignar el nombre a lo que quiera, siempre ya que proporciona las clases de biblioteca estándar necesarias y las funciones necesarias). –

+1

@Michael: De hecho. Me sorprendería si 'g ++' no compilara esto después de arreglar la directiva '# include' para' iostream'. – Johnsyweb

8

La cabecera <iostream.h> es una cabecera anticuado de delante de C++ se hizo estandarizado como ISO C++ 1998 (que es desde el Manual de referencia de C anotado ++). El encabezado estándar de C++ es <iostream>. Hay algunas diferencias menores entre los dos, con la mayor diferencia es que <iostream> pone los contenidos incluidos en el espacio de nombres std, por lo que debe calificar cin, cout, endl, istream, etc. con "std ::". Como una especie de truco (que es un truco, porque los archivos de cabecera no deben contener "por medio de" directrices que derrotan por completo el propósito de espacios de nombres), se podría definir "iostream.ho" de la siguiente manera:

#ifndef HEADER_IOSTREAM_H 
#define HEADER_IOSTREAM_H 

#include <iostream> 
using namespace std; // Beware, this completely defeats the whole point of 
        // having namespaces and could lead to name clashes; on the 
        // other hand, code that still includes <iostream.h> was 
        // probably created before namespaces, anyway. 

#endif 

Si bien esto no es exactamente idéntico al encabezado anticuado original, esto debería ser lo suficientemente cercano para la mayoría de los propósitos (es decir, no debería haber nada o muy pocas cosas que tenga que arreglar).

2

necesito para compilar partport en debian y tenía problemas (CentOS 4.5) obras excelentes que hizo esto sin ningún éxito ln -s /usr/include/c++/4.5/iostream /usr/include/c++/4.5/ iostream.ho

descubro que proporciona iostream.ho de C++ y lo encontré en centos 4.5

así que copian de CentOS 4.5 para Ubuntu Natty el archivo iostream.ho y funcionó
SCP root @ ip .centos-4.5:/usr/include/C++/3.3.4/backward/iostream.h /usr/include/c++/4.5/iostream.h

+0

Tienes suerte. Los encabezados estándar no tienen que ser los mismos entre las implementaciones, y la copia puede introducir errores inmediatos o sutiles. Además, cubre el hecho de que está utilizando un programa escrito en una versión antigua de C++ que puede tener otros errores cuando lo compila un compilador moderno. –