2011-04-19 49 views
2

我在我的頭文件中有這樣的代碼,並且我在ostream和istream行上有大量錯誤。一個錯誤 「失蹤 」; &「 前」 「」 和IM confuzzled,提前即時通訊新本對不起C++運算符<< and >>在頭文件中的方法,做得很錯

#pragma once 

class ArrayIntStorage 
{ 
public: 
    void readFromFile(); 
    bool setReadSort(bool); 
    void sortStd(); 
    void sortOwn(); 

    ArrayIntStorage(void); 
    ~ArrayIntStorage(void); 
}; 

ostream& operator<< (ostream &out, const ArrayIntStorage &a); 
istream& operator>> (istream &in, ArrayIntStorage &b); 

感謝

回答

4

看起來你只需要做

#include <ostream> 
    #include <istream> 

然後在這些行的前面放置一個標準名稱空間限定符,即:

std::ostream& operator<<(std::ostream& out,...) 
+4

或'#包括' – 2011-04-19 15:40:10

+0

什麼是'iosfwd'嗎?從來沒有聽說過它...... – 2011-04-19 19:29:00

+1

@Giovanni'ios' = iostreams'fwd' = forward,換句話說:標準iostreams的前向聲明(不是完整的定義) – Jesper 2011-04-19 21:10:32

1

Y歐省略包括:

#include <istream> 
#include <ostream> 

注:所有的標準類型,如istreamostream現場內的所謂std命名空間。因此,爲了能夠使用它們,你需要:

  • 前綴他們std::
  • 使用的命名空間(using namespace std;)。這對頭文件來說是一個非常糟糕的做法,因爲它可能會導致後面包含的頭文件中的命名衝突。
+0

'iostream'沒有定義'istream'和'ostream','iostream'用於'cin','cout','cerr'和'clog'。 – 2011-04-19 15:42:17

+0

一個應該'把'namespace'放在一個頭文件中,它可以帶來很多s凝聚到不應存在的全球範圍內。 – greyfade 2011-04-19 15:42:56

+0

好吧,我省略了它是頭文件的事實。我將添加更正。 – julkiewicz 2011-04-19 15:43:40

3

我不清楚這段代碼出現在哪裏,但錯誤表明這些聲明出現在ostreamistream之前。

你是否按正確的順序包含正確的頭文件?

0

添加iostream include並將方法原型放入類中並聲明它爲朋友。自從我的手機回覆後,我無法提供更多詳細信息。

這裏是一個鏈接:操作符重載/ Classlevelostreamoperatorandistreamoperator.htm「> http://www.java2s.com/Tutorial/Cpp/0200_Operator-Overloading/Classlevelostreamoperatorandistreamoperator.htm

+0

'istream'和'ostream'沒有在'iostream'中定義。 'iostream'適用於'cin','cout','cerr'和'clog'。 – 2011-04-19 15:42:54