2012-01-09 22 views
5

sto usando oggetto di stringstream come segue:Come aggiungere contenuto al tipo di oggetto stringstream?

#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 codice di cui sopra dà un errore come segue:

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

sopra errore viene risolto una volta ho aggiunto il file di intestazione "# include". ma quando ho stampato il valore del messaggio. sta diventando incompleto. vale a dire il valore ho ottenuto di messaggio è il seguente:

valore messaggio è: la seconda linea continueing secondo linetion, aggiungere valori: my.string

ogni suggerimento sul perché prima linea è la rimozione in uscita? Grazie in anticipo

+0

Prova includendo l'intestazione . – Goofy

+0

hai provato '#include '? – Naveen

+0

invia sempre codice compilabile. 'sting' non è valido in questo contesto. – Default

risposta

12

stringstream è definito in una diversa intestazione:

#include <sstream> 

Inoltre, se si desidera che il contenuto iniziale di attaccare si vorrà qualcosa di simile:

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

dove app mezzi che ogni operazione di output scrive alla fine del flusso. Vedi here.

+1

Grazie Vlad molto .... ho risolto l'errore e ho ottenuto il contenuto corretto. – BSalunke

+0

Nessun problema, felice di aiutare. – Vlad

6

seguito la risposta di Vlad, ho appena provato la seguente (in GCC 4.7.0, MinGW su Windows 7: x86_64-W64-mingw32)

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

Ma poi, ss.good() sarebbe return false subito dopo, che era confusione, dal momento che ss.str() stava ancora restituendo la stringa aggiunta che mi aspettavo, "initial string appended string". Sono infine incappato la seguente riga http://www.cplusplus.com/reference/sstream/stringstream/stringstream/:

Altri valori di tipo ios_base :: openMode (come ios_base :: app) possono inoltre essere specificato, anche se essi hanno un effetto sugli oggetti stringstream dipende dalla libreria implementazione.

Dopo aver letto le "standard" ios_base:: bandiere, ho provato questo, che mi ha dato il contenuto del flusso di allegati che mi aspettavo, con il ritorno ss.good()true:

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

[P.S. Preferirei averlo postato come commento alla risposta di Vlad, dal momento che non è una risposta diretta; è solo un commento sul suo suggerimento per preservare i contenuti del flusso precedente quando si utilizza operator <<. Dal momento che non ho abbastanza punti reputazione per commentare la sua risposta, ma penso che ciò sia utile per gli altri che si imbattono in questo, lo sto postando come risposta.]

Problemi correlati