Domanda

Attualmente sto usando std :: ofstream come segue:

std::ofstream outFile;
outFile.open(output_file);

Quindi provo a passare un oggetto std :: stringstream a outFile come segue:

GetHolesResults(..., std::ofstream &outFile){
  float x = 1234;
  std::stringstream ss;
  ss << x << std::endl;
  outFile << ss;
}

Ora il mio outFile non contiene altro che immondizia: " 0012E708 " ripetuto dappertutto.

In GetHolesResults posso scrivere

outFile << "Foo" << std:endl; 

e verrà emesso correttamente in outFile .

Qualche suggerimento su cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Puoi farlo, che non ha bisogno di creare la stringa. Fa in modo che il flusso di output legga il contenuto del flusso sul lato destro (utilizzabile con qualsiasi flusso).

outFile << ss.rdbuf();

Altri suggerimenti

Se stai usando std :: ostringstream e ti stai chiedendo perché nulla viene scritto con ss.rdbuf () , allora usa .str () la funzione.

outFile << oStream.str();

Quando si passa un rdbuf stringstream a uno stream le nuove righe non vengono tradotte. Il testo di input può contenere \ n , quindi trova sostituisci non funzionerà. Il vecchio codice ha scritto su un flusso e il passaggio a un flusso strings perde la traduzione endl.

Preferirei scrivere ss.str (); invece di ss.rdbuf (); (e usare uno stringstream).

Se si utilizza ss.rdbuf () i flag di formato di outFile verranno ripristinati rendendo il codice non riutilizzabile. Ad esempio, il chiamante di GetHolesResults (..., std :: ofstream & amp; outFile) potrebbe voler scrivere qualcosa del genere per visualizzare il risultato in una tabella:

outFile << std::setw(12) << GetHolesResults ...

... e mi chiedo perché la larghezza sia ignorata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top