Ich möchte std::ostream
wie folgt verwenden:Über std :: ostream Konstruktor
int main()
{
std::ostream os;
os << "something ..." << std::endl;
return 0;
}
Es ist ein Fehler, sagte, dass der Ostream Konstruktor geschützt:
error: ‘std::basic_ostream<_CharT, _Traits>::basic_ostream() [with _CharT = char; _Traits = std::char_traits]’ is protected.
Aber ich erinnere mich operator<<
wie überlastet werden könnte, dies:
// In a class.
friend std::ostream & operator<<(std::ostream& out, const String & s) {
out << s.m_s;
return out;
}
Irgendwelche Tipps, warum mein Code funktioniert nicht?
Haben Sie eine '#include' Präprozessordirektive? Ich glaube auch nicht, dass es einen parameterlosen 'ostream'-Konstruktor gibt - siehe [hier] (http://en.cppreference.com/w/cpp/io/basic_ostream/basic_ostream). 'ostreams sollten um einen stream buffer gewickelt werden - wolltest du stattdessen einen' fstream' oder ähnliches verwenden? –
hnefatl
Ja, ich habe eingeschlossen. Ich möchte std :: ostream wie im Fall des überladenen Operators <<() verwenden. Daher sollte der Konstruktor einen Strompuffer als Parameter haben? –
Jaden
Nein, ich meinte '#include'. Pre C++ 11, nur "iostream" eingeschlossen, reichte nicht immer aus, um "ostream" einzubinden (obwohl ich den SO-Post, der dies jetzt erklärt, nicht finden kann). Ja - Sie können nur ein 'ostream'-Objekt erstellen, wenn Sie ein' streambuf'-Objekt als Parameter übergeben. Dann wird der ostream in diesen Puffer ausgeben. Für eine einfache Erklärung siehe [diesen Beitrag] (http://www.cplusplus.com/forum/beginner/120947/). –
hnefatl