2012-04-03 4 views
0

Ich brauche eine sehr einfache Sache in C++: Verwenden Sie einen von zwei Eingabe-Streams - Datei oder Stdin - abhängig von bestimmten Bedingungen.
wie folgt aus:Stream zur Eingabe auswählen

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

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

Hoffnung ist die Idee klar.

Zunächst einmal scheint es, es nicht in der Lage ist istream Variable zu deklarieren, ohne Verbindung zu einem Gerät oder eine Datei oder was auch immer (istream, weil es für ifstream und ci n üblich ist).
Die zweite Sache ist es nicht in der Lage ist istream Variable überhaupt zu erklären, Compiler sagt:

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

Und deshalb die Klasse habe ich dann für diese Zwecke zu benutzen?

Also, nicht verstanden. Bitte helfen Sie. Danke.

+0

Ich merke, dass dies Ihre erste Post auf Stack Overflow ist. [Hier] (http://StackOverflow.com/faq#howtoask) können Sie lesen, wie Sie Fragen stellen, Antworten bewerten und möglicherweise die Antwort annehmen, die Sie für die nützlichste halten. –

Antwort

1

Sie können eine istream* deklarieren und dann in der if entweder &cin zuweisen oder an die Adresse Ihrer ifstream. Wenn Sie in den folgenden Zeilen die hässliche Syntax des Dereferenzierens Ihres Zeigers vermeiden möchten, können Sie eine istream& deklarieren.

0

Wie Luca erwähnt, werden Sie wahrscheinlich einen istream-Zeiger oder Referenz verwenden müssen. Die Referenz ist etwas kniffliger, da sie nur einmal initialisiert werden kann und später nicht mehr geändert werden kann. Eine weitere Diskussion zu diesem Thema finden Sie here

+0

Cool! Vielen Dank! :) – OlegG