9

出力用の演算子 << をサポートする数値クラスを実装する必要があります。エラーがあります:「識別子「ostream」は未定義です」何らかの理由で含めて試してみましたが

ここにヘッダーファイル:

Number.h

#ifndef NUMBER_H
#define NUMBER_H
#include <iostream>
class Number{
public:
//an output method (for all type inheritance from number):
virtual void show()=0;

//an output operator:
friend ostream& operator << (ostream &os, const Number &f);


};

#endif

コンパイラがフレンド関数で ostream を認識しないのはなぜですか?

4

2 に答える 2

16

ostreamクラスが存在する名前空間の名前で名前を完全に修飾する必要があります。

    std::ostream
//  ^^^^^

したがって、演算子の宣言は次のようになります。

friend std::ostream& operator << (std::ostream &os, const Number &f);
//     ^^^^^                      ^^^^^

usingまたは、非修飾名ostreamが表示される前に宣言することもできます。

using std::ostream;

ostreamこれにより、現在のバージョンのプログラムのように、完全修飾なしで名前を書くことができます。

于 2013-05-14T11:08:05.790 に答える
0

Andy Prowl の答えは素晴らしいですが、ヘッダーに「std::ostream を使用」を入れないようにしてください。これを行うと、ヘッダー ファイルを使用する他のコンパイル ユニットもデフォルトでこの名前空間が「使用」され、名前空間の衝突で厄介なコンパイル エラーが発生する可能性があります。

于 2013-05-14T11:16:44.207 に答える