Pergunta

Atualmente estou usando std::ofstream da seguinte forma:

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

Então eu tentar passar um objeto std::stringstream para outFile da seguinte forma:

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

Agora meu outFile contém nada além de lixo: "0012E708" repetido em todo

Em GetHolesResults eu posso escrever

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

e irá imprimir corretamente no outFile.

Qualquer sugestão sobre o que estou fazendo de errado?

Foi útil?

Solução

Você pode fazer isso, que não precisa criar a string. Isso torna o fluxo de saída ler o conteúdo do fluxo no lado direito (utilizável com qualquer streams).

outFile << ss.rdbuf();

Outras dicas

Se você estiver usando std::ostringstream e se perguntando por que nada se escrito com ss.rdbuf() em seguida, use a função .str().

outFile << oStream.str();

Ao passar um rdbuf stringstream para um fluxo de novas linhas não são traduzidos. O texto de entrada pode conter \n assim que encontrar substituir não vai funcionar. O código antigo escreveu a um fstream e ligá-lo a uma perda stringstream a tradução endl.

Eu tinha ss.str(); em vez de gravação em vez de ss.rdbuf(); (e usar um stringstream).

Se você usar ss.rdbuf() O formato com bandeiras de outFile será reposto tornando o seu código não reutilizáveis. Ou seja, o chamador de GetHolesResults(..., std::ofstream &outFile) pode querer escrever algo como isto para exibir o resultado em uma tabela:

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

... e admira por isso que a largura é ignorado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top