2012-04-03 28 views
0

私はC++で非常に単純なことが必要です:特定の条件に応じて、2つの入力ストリーム - ファイルまたは標準入力から1つを使用します。そのような
入力ストリームを選択

istream s; 
if (true) 
    s = cin; 
else 
    s = ifstream(argv[1]); 

while (s.read()) /* ... */ 

ホープアイデアは明らかです。

まず第一に、任意のデバイスまたはファイルまたは何に接続せずに(それはifstreamci nに共通であるため、istreamistream変数を宣言することができないようです。
第二のものは、すべてでistream変数を宣言することができないで、コンパイラは言う:私は、その目的のために使用する必要がクラス

error: ‘std::basic_istream<_CharT, _Traits>::basic_istream() [with _CharT = char, _Traits = std::char_traits<char>]’ is protected 

そのために?

したがって、理解できませんでした。助けてください。おかげさまで

+0

私はこれがあなたの最初の投稿であることに気付きます。 [ここ](http://stackoverflow.com/faq#howtoask)では、質問をしたり、回答を評価したり、最も役に立つと思われる回答を受け入れる方法を読むことができます。 –

答えて

1

istream*を宣言し、次にifを&cinまたはifstreamのいずれかに割り当てることができます。次の行では、逆参照の醜い構文を避けたい場合は、istream&を宣言できます。

0

Lucaが言及したように、おそらくistreamポインタや参照を使う必要があります。リファレンスは一度しか初期化できず、後で変更することはできないため、リファレンスは少しトリッキーです。このトピックの別の議論は見つけることができますhere

+0

クール!ありがとう! :) – OlegG

関連する問題