ошибка: ожидаемый конструктор, деструктор или преобразование типа перед токеном ‘

#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. и не используйте запятую, это ужасно.