2012-01-09 8 views
5

estoy usando objeto de stringstream de la siguiente manera:¿Cómo agregar contenido al objeto tipo secuencia de cadena?

#include<iostream> 
#include <istream> 

using namespace std; 
int main() 
{ 
    sting str="my.string"; 

    std::stringstream message("HI this is firet line from initialization"); 

    message << " second line " << " Continueing second line"; 

    message << ", Add values: "; 

    message << str ; 


    std::cout<<"message value is :"<<message.str()<<std::endl; 

    return 0; 
} 

con el código de seguridad que da un error de la siguiente manera:

error: variable 'std::stringstream message' has initializer but incomplete type 

por encima de error se resuelve una vez que he añadido el archivo de cabecera "# include". pero cuando imprimí el valor del mensaje. está incompleto es decir, el valor que tengo del mensaje es el siguiente:

valor del mensaje es: segunda línea continueing segundo linetion, Añadir valores: my.string

cualquier sugerencia sobre por qué la primera línea es la eliminación de la producción? Gracias de antemano

+0

Intente incluir encabezado. – Goofy

+0

intenté '#include '? – Naveen

+0

código siempre compilable. 'sting' no es válido en este contexto. – Default

Respuesta

12

stringstream se define en una cabecera diferente:

#include <sstream> 

Además, si desea que los contenidos iniciales para pegar querrá algo como:

std::stringstream message("HI this is firet line from initialization", 
              ios_base::app | ios_base::out); 

donde app medios que cada operación de salida escribe al final de la secuencia. Ver here.

+1

Gracias Vlad mucho ... tengo el error resuelto, así como el contenido correcto. – BSalunke

+0

No hay problema, me complace ayudarlo. – Vlad

6

siguiente respuesta de Vlad, sólo trataron los siguientes (en GCC 4.7.0, MinGW en Windows 7: x86_64-W64-mingw32)

std::stringstream ss("initial string", ios_base::app | ios_base::out); 
ss << " appended string"; 

Pero después, ss.good() volvería falsa inmediatamente después, que era confuso, ya que ss.str() seguía devolviendo la cadena que esperaba, "initial string appended string". finalmente me topé con la siguiente línea de http://www.cplusplus.com/reference/sstream/stringstream/stringstream/:

Otros valores de tipo ios_base :: openmode (como ios_base :: app) también pueden ser especificados, aunque si tienen un efecto en objetos stringstream depende de la biblioteca implementación.

Después de leer sobre los ios_base:: banderas "estándar", he intentado esto, lo que me dio el contenido de flujo adjuntas que esperaba, con ss.good() regresar true:

std::stringstream ss("initial string", ios_base::ate | ios_base::in | ios_base::out); 

[P. S. Prefiero haber publicado esto como un comentario sobre la respuesta de Vlad, ya que no es una respuesta directa; solo se trata de un comentario sobre su sugerencia de preservar los contenidos de la secuencia anterior al usar operator <<. Como no tengo suficientes puntos de reputación para comentar su respuesta, pero creo que esto será útil para los demás que se den cuenta, lo publico como una respuesta.]

Cuestiones relacionadas