Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!
Werbeanzeige
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
template<class T> Output& operator << (const T& t) { std::cout << t; mLog << t; return (*this); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 |
Output& Output::operator << (basic_ostream<char,char_traits<char>>& (*fPtr) (basic_ostream<char,char_traits<char>>&) ) { fPtr(std::cout); fPtr(mLog); // geht natürlich nur, wenn mLog irgendeine Ableitung von std::basic_ostream<char> als Typ hat. return (*this); } |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
//! Routes output to a file and to std::cout class Output { public: Output(void); ~Output(void); void pause(void) const; //! Works like a normal output stream template<class T> const Output& operator << (const T& t) const { std::cout << t; mLog << t; // Hier aber ein Fehler :( return (*this); } static std::basic_ostream<char,std::char_traits<char> >& endl(std::basic_ostream<char,std::char_traits<char> >& s) { s.put('\n'); s.flush(); return (s); } private: std::ofstream mLog; }; |
C-/C++-Quelltext |
|
1 |
Fehler 1 error C2678: Binärer Operator '<<': Es konnte kein Operator gefunden werden, der einen linksseitigen Operanden vom Typ 'const std::ofstream' akzeptiert (oder keine geeignete Konvertierung möglich) f:\projekte\word\word - server\src\Output.h 28 |
mLog ist n std::ofstream und wird momentan einfach mit std::ofstream("log.txt") initialisiert. Das geht anders? Wäre sehr schön, nur wieZitat von »"Deviloper"«
Irgendwie gibt dein Programm noch nicht soviel sind ... was für ein Stream ist mLog? Also wo soll die Ausgabe landen?
Willst du einfach einen Stream haben, dessen Ausgabe in 2 Ausgabestreams landet? Das geht anders ...
Falsch inwiefern? Ich hab im wesentlichen hier abgeschrieben xD Aber das mit dem augelösten ofstream ist echt bizarr, das kann sogar ich korrigieren xDZitat
Dein endl ist einfach ... falsch!
Und warum löst du manchmal std::ostream auf (std::basic_ostream<char ... >)?
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#include <streambuf> namespace log { class two_streambuf : public std::streambuf { std::streambuf* m_first; std::streambuf* m_second; std::char_traits<char>::int_type overflow(std::char_traits<char>::int_type c) { if (std::char_traits<char>::eq_int_type(c, std::char_traits<char>::eof()) == true) return std::char_traits<char>::not_eof(c); c = m_first->sputc(c); if (std::char_traits<char>::eq_int_type(c, std::char_traits<char>::eof()) == false) c = m_second->overflow(); return c; } int sync() { return (m_first->sync() != -1 ? m_second->sync() : -1); } public: explicit two_streambuf (std::streambuf* ptr_first, std::streambuf* ptr_second) : m_first(ptr_first), m_second(ptr_second) {} }; }; |
C-/C++-Quelltext |
|
1 2 3 4 5 6 7 8 |
int main() { std::ofstream file_stream("log.txt"); log::two_streambuf buffer(std::cout.rdbuf(), file_stream.rdbuf()); std::clog.rdbuf(&buffer); std::clog << "Das ist mein erster String!" << std::endl; } |
Werbeanzeige