Frage

Ich bin derzeit std::ofstream wie folgt:

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

Dann versuche ich, ein std::stringstream Objekt outFile passieren wie folgt:

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

Nun mein outFile enthält nichts anderes als Müll: "0012E708" all over wiederholt

.

In GetHolesResults kann ich schreiben

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

und es wird korrekt ausgegeben in outFile.

Jeder Vorschlag, auf das, was ich falsch mache?

War es hilfreich?

Lösung

Sie können dies tun, das muss nicht die Zeichenfolge erstellen. Es macht den Ausgangsstrom den Inhalt des Stroms auf der rechten Seite ausgelesen (verwendbar mit beliebiger Streams).

outFile << ss.rdbuf();

Andere Tipps

Wenn Sie std::ostringstream verwenden und fragen sich, warum nichts mit geschrieben werden ss.rdbuf() dann .str() Funktion verwenden.

outFile << oStream.str();

Wenn Sie eine string RDBUF in einen Stream newlines passieren, werden nicht übersetzt. Der eingegebene Text kann enthalten \n finden so ersetzen wird nicht funktionieren. Der alte Code schrieb an einem fstream und es zu einem string Verluste der Endl Übersetzung wechseln.

Ich würde eher schreiben ss.str(); statt ss.rdbuf(); (und verwenden Sie einen string).

Wenn Sie ss.rdbuf() die Format-Flags von outFile verwenden wird zurückgesetzt, Ihren Code nicht wiederverwendbar zu machen. Das heißt, kann der Anrufer von GetHolesResults(..., std::ofstream &outFile) will, so etwas zu schreiben, das Ergebnis in einer Tabelle angezeigt werden:

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

... und frage mich, warum die Breite ignoriert wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top