【问题标题】:Where to get iostream.h从哪里获得 iostream.h
【发布时间】:2011-04-11 12:39:30
【问题描述】:

我正在尝试在 Linux 中制作一些东西,但它抱怨找不到 iostream.h。我需要安装什么才能获取此文件?

【问题讨论】:

  • 这是您要使用的代码中的一个错误。如果可能,您应该向项目的维护人员提供错误报告。

标签: linux g++ makefile debian


【解决方案1】:

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

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

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

...并按照编译器的文档将其添加到包含路径中。

【讨论】:

  • g++ 和任何标准 C++ 编译器都应该自动找到 C++ 头文件,而无需指定它们的位置;事实上,理论上,C++ 标准允许以不涉及名为“iostream”的文件的方式解析“”(即,允许编译器将名称映射到任何它想要的名称,只要它提供必要的标准库类和所需的功能)。
  • @Michael:确实。如果g++ 在将#include 指令修复为iostream 后没有编译它,我会感到惊讶。
【解决方案2】:

头文件 是 C++ 标准化为 ISO C++ 1998 之前的一个过时头文件(它来自 C++ Annotated Reference Manual)。标准 C++ 头文件是 。两者之间有一些细微的区别,最大的区别是 将包含的内容放在命名空间 std 中,因此您必须使用“std::”来限定 cin、cout、endl、istream 等。作为一种 hack(这是一种 hack,因为头文件不应该包含“using”指令,因为它们完全违背了命名空间的目的),您可以如下定义“iostream.h”:

#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 上找到了它

    所以我从 centos 4.5 复制到 ubuntu natty 文件 iostream.h 并且它有效
    scp root@ip.centos-4.5:/usr/include/c++/3.3.4/backward/iostream.h /usr/include/c++/4.5/iostream.h

    【讨论】:

    • 你很幸运。实现之间的标准标头不必相同,复制可能会引入直接或微妙的错误。此外,它掩盖了这样一个事实,即您使用的是用 C++ 的古老版本编写的程序,在现代编译器编译时可能存在其他错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多