2011-03-03 114 views
2

我使用两个编译器g ++和Dev - C++。当我在Dev-C++上编译我的程序时,它完美编译。但是当我尝试在g ++上编译它时,它给了我两个错误:istream和ostream问题 - C++

 
In file included from a2test.cpp:27: 
----.h:25: error: 'ostream' has not been declared 
----.h:26: error: 'istream' has not been declared 

任何人都可以告诉我该怎么做才能解决此问题。

谢谢

+0

那么,是至少有一个头,它定义了那些包括? – 2011-03-03 04:03:52

+0

Dev C++头文件可能是旧的,要么将这些对象放在全局名称空间中,要么为它们使用'using'语句,或者使用'std'命名空间。丑陋。也有可能这个包含了不同的层次结构,你只是期望这些对象被声明,因为你包含了一些其他的头文件,在Dev-C++中使用它们。正如比利所说,检查你确实有一个'#include '或''声明。无奈之下,仅仅运行编译器的预处理器阶段('gcc -E')往往能够对包含的内容进行有用的分析。 – 2011-03-03 04:09:04

+0

显示代码:-) – 2011-03-03 04:11:07

回答

4

确保包含fstream。另外,在ostream之前加上“std ::”,或者把“using namespace std”放在某个地方。

如果您发布代码,这将有所帮助,因为现在我只是根据常见错误进行猜测。

我猜你忘了,包括fstream的,因为不同的编译器可能使用不同的头文件,它可能是G ++与

// iostream 
#include <fstream> 

一个头文件的情况下,虽然开发-C++可能有

// iostream 
// no include for fstream in this file 

所以你意外地导入了正确的头文件,而不是明确地做。

对于头文件,当我忘记哪一个时,我只是使用这个网站。

ostream - C++ Reference

看来你需要包括的ostream得到ostream的。对于istream来说可能是同样的事情。

+1

错误是针对'istream'和'ostream' - 可从''和''或共同从''(声明)或''(定义)特别包含''(它包含从'istream'和'ostream'派生的类,因此将包含它们的定义以及其他潜在不必要的代码)。 – 2011-03-03 04:13:06

2

我的心理调试技巧表明,问题可能意味着您对g ++和g ++ Dev-CPP使用的调用是不同版本的gcc。 Dev-CPP附带的(推测较早)版本中的头文件可能是标准C++头文件,它不需要,这将允许非严格地严格的头文件进行编译。

确保你实际上已经#include d <iostream>,或<istream><ostream>,或<iosfwd> - 一些头实际上包括以下类型的为您服务。

注意事项:请不要使用Dev-CPP - 这个项目几乎已经死了,编辑犯了很多罪,加上它不是一个好的编辑器。 :块或Visual Studio(都是免费的),而不是?)

0

不知道这是否会有所帮助,但首先,你应该记得省略其他编译器(MS-C++)使用的“.h”,而不是ANSI /G++.so它应该只是

#include <iostream> 

其次,不要忘记:

using namespace std; 

第三,它已经很长时间了,但如果我没有记错,在g ++中,th istream和ostream函数在“std”库中。所以你可以做这样的事情:

using std::istream; 
//later 
istream::iostate state = ... 

,或者也可以直接使用它们像这样:

std::istream::iostate state = ... 

希望这会给你一些想法。

+1

MS-C++不添加'.h'。它将**接受**这样的代码并发出警告,就像GCC一样。此外,G ++不再是ANSI,而是MSVC++。 – 2011-03-03 04:17:01

+1

如果我没有记错的话,g ++将不会接受#include ,此外,你错过了使用std库的全部观点。 – 2011-03-03 04:34:51

+0

嗯..看来你是正确的(如GCC 4.4.3)。当你看到“缺少点”时,我将其视为“FUD”。在这个答案中也没有理由对FUD进行解释。如果没有它,情况会非常好。 ''只是旧的;从C++标准化之前开始。标准并不要求它在那里,但是如果编译器确实提供了它,它也不会与标准相悖。如果“整点”是“使用名称空间标准;”,那么这是一个坏点 - 使用'使用名称空间标准;'是一个可怕的建议。 – 2011-03-03 06:52:28