Я пытаюсь написать свою программу, чтобы она могла обрабатывать либо StdIn, либо файл, указанный в командной строке.Инициализация ссылки на istream
Я делаю это, пытаясь инициализировать ссылку на istream
или ссылаться на cin
или ifstream
, используя условное обозначение.
(подобные методы описаны here и here)
Но когда я пытаюсь с ifstream
, я, кажется, получаю сообщение об ошибке, что basic_istream ход-конструктор объявлен protected
.
istream& refToCIN (cin); // This is OK
const istream& refToFile = ifstream(args[1]); // This is OK
const istream& inStream (FileIsProvided()? ifstream(args[1]) : cin);
// This causes error:
// std::basic_istream<char,std::char_traits<char>>::basic_istream' :
// cannot access protected member declared in class std::basic_istream<char,std::char_traits<char>>
ProcessStream(inStream); // This could either be a file or cin
Можно ли это сделать таким образом? Есть ли хорошая альтернатива, которую я пропускаю?
'ifstream (арг [1])' создает временный. Вы не можете привязывать к нему неконстантную ссылку. И ваш первый пример (reftofile) определяет функцию, а не объект. – SergeyA
Я добавил 'const', но это не меняет существенную проблему. – abelenky
Да, я объясню в ответе. – SergeyA