views:

71

answers:

2

I'm trying to make something in Linux, but it complains that it can't find iostream.h. What do I need to install to get this file?

+5  A: 

The correct name of this standard header is just iostream without an extension.

If your compiler still cannot find it, try the following:

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

...and add it to your include path, following your compiler's documentation.

Johnsyweb
@Johnsyweb, g++ and any standard C++ compiler should automatically find the C++ headers without needing their location to be specified; in fact, the C++ standard allows, in theory, for "<iostream>" to be resolved in a manner that does not actually involve a file named "iostream" (i.e., the compiler is allowed to map the name to whatever it wants, so long as it provides the necessary standard library classes and functions required).
Michael Aaron Safyan
@Michael: Indeed. I'd be surprised if `g++` didn't compile this after fixing the `#include` directive to `iostream`.
Johnsyweb
+1  A: 

The header <iostream.h> is an antiquated header from before C++ became standardized as ISO C++ 1998 (it is from the C++ Annotated Reference Manual). The standard C++ header is <iostream>. There are some minor differences between the two, with the biggest difference being that <iostream> puts the included contents in namespace std, so you have to qualify cin, cout, endl, istream, etc. with "std::". As somewhat of a hack (it is a hack because header files should never contain "using" directives as they completely defeat the purpose of namespaces), you could define "iostream.h" as follows:

#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

While this is not exactly identical to the original antiquated header, this should be close enough for most purposes (i.e. there should be either nothing or very few things that you will have to fix).

Michael Aaron Safyan