#c #g
#c #g
Вопрос:
Я написал следующие коды. Проблема должна быть в функции istringstream. что я сделал не так? Заранее спасибо.
//read a string from input with a istringstream function and output the string
word by word;
//1.the function takes and returns an istringstreamamp;
//2.the function reads the stream until it hits eof
//the function should print the contents of an istringstream object
#include <iostream>
#include <string>
#include <sstream>
istringstreamamp; read(istringstreamamp; input)
{
string string, word;
while(getline(input,string), !input.eof())
{
if (input)
{
istringstream instring(string);
instring>>word;
cout<<word<<'_'<<ends;
}
if (input.bad())
throw runtime_error("data is corrupted");
if (input.fail())
cerr<<"data failed, try again"<<ends;
input.close();
input.clear();
}
return istringstreamamp;;
}
int main ()
{
cout<<"enter a string"<<endl;
read(cin);
}
эта ошибка вывода: (строка 9)
error: expected constructor, destructor, or type conversion before ‘amp;’ token
Комментарии:
1. Пожалуйста, не редактируйте вопрос, чтобы полностью изменить его значение после того, как другие ответили. Это просто делает ответы непонятными и делает их бесполезными для будущих посетителей. Вы могли бы либо (а) отредактировать свой вопрос и добавить новую связанную проблему к вашему исходному вопросу, либо (б) задать отдельный вопрос.
2. Я откатил вашу правку.
3. Нет проблем. 🙂 Все же опубликуйте свой второй вопрос!
Ответ №1:
Изменить:
return istringstreamamp;;
Для:
return input;
Однако, учитывая, что вы не используете возвращаемое значение, вы могли бы изменить возвращаемый тип read()
на void
и вообще ничего не возвращать.
Комментарии:
1. после изменения на «return input;» все та же ошибка. Я пытаюсь написать функцию istringstream, которая возвращает istringstream. просто для практики. итак, я хочу выяснить, что я здесь делаю не так. Спасибо
Ответ №2:
Все эти вещи определены в std::
пространстве имен.
Если вы ленивы, вы можете using namespace std;
, но это не очень хорошая практика.
Комментарии:
1. отлично, это сработало, это пространство имен. также cin не является istringstreamamp; . это также было проблемой. проверка «input.eof()» удаляет последнее слово строки. т.е. вводит строку «hello world», выводит «hello_». почему это произошло?
2. переключите eof и getline. и не используйте запятую, это ужасно.