【问题标题】:Use of #include <iostream.h>#include <iostream.h> 的使用
【发布时间】:2013-01-17 20:24:53
【问题描述】:

我正在处理一个旧项目,该项目仍然包含已弃用的“#include iostream.h”。我知道 iostream.h 已被弃用且不应使用,但此代码必须在其上运行/编译的某些系统是运行 CC 且没有可用 iostream 的旧 Solaris 机器。我的问题是:如何让我更现代的 g++ 编译器接受 iostream.h 包含。

编辑:编译器找不到 iostream.h 文件,所以我假设库的任何 .h 版本都不适用于 g++。

【问题讨论】:

  • -std=c++98 标志是一个选项吗?
  • @Andy 这行得通吗? iostream.h 从未出现在 C++98 标准中。
  • @KonradRudolph:不确定,我不熟悉这些旧标头,我只是认为旧标准可能支持它们并提供了提示。很可能是错的
  • @AndyProwl:当然不适合我(g++ 4.7.2)
  • iostream.h 不推荐使用。它从来都不是标准的,所以不可能弃用。这是一个准标准头。

标签: c++


【解决方案1】:

最简单的解决方案可能是创建一个名为iostream.h 的本地头文件,其中只包含&lt;iostream&gt; 并导入命名空间std。然后,为了让编译器允许#include &lt;iostream.h&gt;,您将本地路径添加到包含文件搜索路径中。对于 g++,这是可行的:

g++ -I local_folder [other flags] …

顺便说一下,你的评论

…已弃用的“#include iostream.h”

不太正确:这不是被弃用的,因为它从来不是合法的 C++。

【讨论】:

  • 但是 '' 不需要 std 命名空间吗?
  • 你可能希望它做#include &lt;iostream&gt;\nusing namespace std; 对代码编译/工作有一些希望。
  • @Matt 我不确定,所以我故意含糊其辞。只需添加using namespace std; 即可。
  • +1 这是一个很好的答案。但请添加有关 OP 关于弃用的错误声明的信息。 SO 作为传播这种误解的一种手段是不好的。
  • @Cheersandhth.-Alf 好吧,我实际上认为你对这个问题的评论是一个更好的地方来告诫这一点,但我已经添加了它的价值。
【解决方案2】:

我会退后一步,写另一个你在任何地方都使用的中间标头,而不是像这样:

#if defined(sun) || defined(__sun)
# if defined(__SVR4) || defined(__svr4__)
/* Solaris */
#include <iostream>
# else
/* SunOS */
#include "iostream.h"
# endif
#else
/* Sane, modern system */
#include <iostream>
#endif

【讨论】:

  • 这也是我的想法,我只是不确定如何处理命名空间问题,因为旧的 SunOS 不理解命名空间。修改该中间体以在定义 iostream 的位置包含“使用命名空间 std”?
  • -1 这是一个不好的答案,因为 C 和 C++ 的系统检测与网页的浏览器检测一样非常糟糕。除非您从事的是平台适配业务,例如 boost。
猜你喜欢
  • 1970-01-01
  • 2010-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-20
  • 2011-04-11
  • 2011-02-27
  • 2010-11-25
相关资源
最近更新 更多