error: constructor esperado, destructor o conversión de tipo antes del token '&'

Escribí los siguientes códigos. El problema debería ser la función istringstream. ¿qué hice mal? Gracias por adelantado.

//read a string from input with a istringstream function and output the string   
word by word;
//1.the function takes and returns an istringstream&
//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>

istringstream& read(istringstream& 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 istringstream&;
}

int main ()
{   
    cout<<"enter a string"<<endl;
read(cin);
}

este error de salida es: (línea 9)

 error: expected constructor, destructor, or type conversion before ‘&’ token

preguntado el 08 de noviembre de 11 a las 17:11

No edite la pregunta para cambiar su significado por completo después de que otros hayan respondido. Eso solo hace que las respuestas sean ininteligibles y las hace inútiles para los futuros visitantes. Puede: (a) editar su pregunta y anexar el nuevo problema relacionado con su pregunta original, o (b) haga una pregunta separada. -

He revertido tu edición. -

No hay problema. :) ¡Sin embargo, publique su segunda pregunta! -

2 Respuestas

Cambiar:

return istringstream&;

a:

return input;

Sin embargo, dado que no usa el valor devuelto, puede cambiar el tipo de devolución de read() a void y no devolver nada en absoluto.

respondido 08 nov., 11:21

después de cambiar a "return input;" sigue siendo el mismo error. Estoy tratando de escribir una función istringstream que devuelva istringstream. solo para practicar. así que quiero averiguar qué estoy haciendo mal aquí. Gracias - ihm

Todas esas cosas se definen en el std:: espacio de nombres

Si eres perezoso puedes using namespace std;, pero no es una buena práctica.

respondido 08 nov., 11:21

genial, funcionó, es el espacio de nombres. también cin no es istringstream &. ese también era el problema. la verificación "input.eof ()" borra la última palabra de la cadena. es decir. cadena de entrada "hola mundo", salida "hola_". ¿Por qué pasó esto? - ihm

cambie eof y getline. y no uses coma, es horrible. - Karoly Horvath

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.