在哪里获取iostream.h文件?

11

我正在尝试在Linux上创建一个东西,但它抱怨找不到iostream.h。我需要安装什么来获取这个文件?


3
代码中存在一个bug,如果可能的话,你应该向项目维护者提交一个bug报告。 - Konrad Rudolph
1
可能是为什么g++找不到iostream.h?的重复问题。 - phuclv
3个回答

18

这个标准头文件的正确名称只是iostream,没有扩展名。

如果你的编译器仍然找不到它,请尝试以下操作:

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

...并将其添加到您的包含路径中,根据您的编译器文档进行操作。


2
g++和任何标准的C++编译器都应该自动找到C++头文件,而不需要指定它们的位置;事实上,C++标准理论上允许“<iostream>”以一种不涉及名为“iostream”的文件的方式解析(即,编译器可以将名称映射到任何所需的标准库类和函数)。 - Michael Aaron Safyan
1
@Michael:确实。如果将#include指令更正为iostream后,g++不能编译这个程序,我会感到惊讶的。 - johnsyweb

11

<iostream.h>头文件是一个古老的头文件,它出现在C++被标准化为ISO C++ 1998之前(它来自于C++ Annotated Reference Manual)。标准C++头文件是<iostream>。两者之间存在一些微小的差异,最大的区别是<iostream>将包含的内容放入std名称空间中,因此您必须使用"std::"限定cin、cout、endl、istream等。您可以通过以下方式定义"iostream.h"来进行某种程度上的hack(这是一种hack,因为头文件不应包含"using"指令,因为它们完全破坏了名称空间的目的):

#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

虽然这不完全与原始过时的标题相同,但对于大多数目的来说,这应该足够接近(即你只需要修复很少或没有东西)。


3

我需要在Debian上编译partport,但遇到了问题(CentOS 4.5则没有问题)。我尝试了以下方法,但均未成功:

ln -s /usr/include/c++/4.5/iostream /usr/include/c++/4.5/iostream.h

我发现iostream.h是从C++提供的,并且我在CentOS 4.5上找到了它。
所以我把文件iostream.h从CentOS 4.5复制到Ubuntu 11.04(Natty Narwhal),然后它可以工作:
scp root@ip.centos-4.5:/usr/include/c++/3.3.4/backward/iostream.h /usr/include/c++/4.5/iostream.h

2
你很幸运。标准头文件在不同的实现之间不必相同,复制可能会引入即时或微妙的错误。此外,它掩盖了一个事实,即您正在使用用古老版本的C++编写的程序,在由现代编译器编译时可能存在其他错误。 - David Thornley
什么是“partport”?搜索引擎希望它是“passport”。 - Peter Mortensen
好的,OP已经离开了:“上次出现是在11年前”。但也许其他人可以加入讨论? - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接