2013-01-17 73 views
1

的使用我正在研究一个旧的项目,该项目仍有不合适的“#include iostream.h”包含。我知道iostream.h已被弃用,不应该被使用,但是这些代码必须运行/编译的一些系统是运行CC的老式solaris机器,并且没有iostream可用。我的问题是:如何让我的更现代的g ++编译器接受iostream.h包含。#include <iostream.h>

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

+0

是-std = C++ 98标志的选项? –

+3

@安迪是否有效? 'iostream.h'从来不在C++ 98标准中。 –

+0

@KonradRudolph:不知道,我不熟悉这些旧标题,我只是认为旧标准可能已经支持它们并提供了一个提示。这很可能是错误的 –

回答

4

我会退后一步,写你到处使用,而不是,它像其他中间头:

#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 
+0

这也是我的想法,即时通讯只是不知道如何处理命名空间问题,因为旧的SunOS不理解命名空间。修改该中间体以在定义iostream的地方包含“using namespace std”? –

+0

评论中的“理智”为+1。 – Griwes

+1

-1这是一个不错的答案,因为C和C++的系统检测与网页的浏览器检测一样**非常差。除非你从事平台自适应业务,比如boost。 –

4

最简单的解决方案可能是创建一个名为iostream.h的本地头文件,它只包含<iostream>并导入命名空间std。然后,为了使编译器允许#include <iostream.h>将本地路径添加到包含文件搜索路径。对于G ++,这个工程:

g++ -I local_folder [other flags] … 

顺便说一句,你的话大约

...不推荐使用 “的#include iostream.h”

是不太正确的:这是不是由于它从来没有合法的C++而被弃用。

+0

但''需要一个std命名空间吗? –

+0

您可能希望它执行'#include \ n使用命名空间标准;'有一些代码编译/工作的希望。 –

+0

@Matt我不确定,所以我故意模糊地回答我的回答。只需添加'using namespace std;'然后。 –