2011-09-13 4 views
2

ostreamに渡されたostreamを取得する関数があります。私はそれが動作することを確認するためにostreamをテストする必要があります。私はすべての例外をキャッチするcatchステートメントでtryブロックにprintステートメントを配置します。これがうまくいくかどうかをテストするために、関数を渡すために悪いostreamを作成する助けが必要です。関数に渡されたostreamをテストする方法のヘルプ/アドバイスが必要です

私はこの試みた:

filebuf buffer; 
ostream& out = ostream(&buffer); 
test1.print(out); 

をしかし、私はそれをテストするとき、私は私のエラーメッセージを印刷することができません。関数に渡す悪いostreamを作成するための良い方法は何でしょうか。

また、try-catchブロックを使用するよりも、ostreamを確認する良い方法がありますか?

+0

何を確認しますか?悪いと定義する。どのようなエラーメッセージですか? –

+1

ostream.bad()はストリームの状態を教えてくれます –

+2

'bad'は失敗ビットをチェックしないので便利ではありません。 –

答えて

2

どのファイルにも公開されていないofstreamはどうですか?

+0

これは答えですか? – iammilind

+1

@ iammilind:「関数に渡す悪いostreamを作成するより良い方法は何でしょうか」と答えます。個人的に私はそれが質問の中で最も緊急な部分であるとは考えていませんでした:-) –

+0

@スティーブ:質問の唯一の他の部分は、私が無視した最後の行の補足です。 –

2

ストリームは動作しないときに例外をスローしないため、操作が成功したかどうかにかかわらず、エラーメッセージは表示されません。

iosベースクラスには、それを制御するために使用できるexceptionsという機能がありますが、そのような引数の状態を変更する関数を書くことはかなり反社会的なので、必ず復元する必要があります(たとえそれが例外をスローしたとしても)

ストリーム上の操作の成功をテストする通常の方法は、ifを使用しています。ストリームは、すべてがOKであれば真の値に、それ以外の場合には偽の値に評価されます。つまり、boolの値trueまたはfalseではなく、条件付きの真/偽の値を意味します。

正確には、failbitまたはbadbitが設定されている場合はfalseです。最後の操作は、少なくとも1つが設定されている場合にのみ「動作しませんでした」。

+0

くそー、私は今日遅いです:) –

+1

+想像上の0.5ポイント、Tomalakの答えと組み合わされて - それから私たちは完全な答えを持っています! :) – Nim

+0

ありがとう、私は試行された出力の後にfailbitをチェックしようとし、それは私のエラーメッセージを引き起こした – DFord

関連する問題