2011-03-03 36 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