 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Thorsten Lück Guest
|
Posted: Wed Nov 19, 2003 2:57 pm Post subject: Seltsames Verhalten bei von ostream abgeleiteter Klasse |
|
|
Hallo,
für das Debuggen und loggen wollte ich von ostream eine Klasse ableiten, um
den stream zu splitten:
zum Einen soll als Logfile in ein File geschrieben werden
zum Anderen gleichzeitig auf stdout.
Meine Klasse sieht dabei so aus:
---
#include <fstream>
#include <string>
using namespace std;
class ologstream : public std::ofstream
{
public:
ologstream(){};
ologstream(const char* name) : std::ofstream(name)
{
}
~ologstream()
{
};
public:
template <class T>
ologstream& operator <<(T& x)
{
std::cout << x;
(*((std::ofstream*)this)) << x;
return *this;
}
};
---
Das Testprogramm:
---
#include "log_stream.h"
int main(int argc, char* argv[])
{
int i=0;
ologstream ls("test.txt");
ls << "Hallo" << 'n' << i << std::endl;
return 0;
}
---
Das Programm kompiliert in der obigen Form einwandfrei.
Ändert man jedoch die Zeile 7 in
ls << "Hallo" << i << std::endl;
so dass kein Character mehr ausgegeben wird, gibt es Fehler:
log_test.cpp: In function `int main(int, char**)':
log_test.cpp:12: error: no match for 'operator<<' in '
(+(&ls)->ologstream::operator<<(T&) [with T = const
char[6]]("Hallo"))->ologstream::operator<<(T&) [with T = int]((&i)) <<
std::endl(std::basic_ostream<_CharT, _Traits>&)'
.....
Ich habe es probiert unter
Visual C++ .net / Win2k
g++ (GCC) 3.3.1 / SuSE 9.0
Wo liegt der Fehler?
Danke und Gruß,
--
Thorsten Lück
Für persönliche Antwort bitte Unterstrich aus Mail-Addresse entfernen.
For private response plesae remove underscores from mail-adress.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Markus Schaaf Guest
|
Posted: Wed Nov 19, 2003 4:18 pm Post subject: Re: Seltsames Verhalten bei von ostream abgeleiteter Klasse |
|
|
Thorsten Lück schrieb:
| Quote: | für das Debuggen und loggen wollte ich von ostream eine Klasse ableiten, um
den stream zu splitten:
zum Einen soll als Logfile in ein File geschrieben werden
zum Anderen gleichzeitig auf stdout.
Wo liegt der Fehler?
|
Du leitest von »ostream« ab, um dessen Verhalten zu ändern, aber das
geht nicht, weil es keine polymorphe Klasse ist. »streambuf« ist die
polymorphe Schnittstelle.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Thorsten Lück Guest
|
Posted: Wed Nov 19, 2003 5:00 pm Post subject: Re: Seltsames Verhalten bei von ostream abgeleiteter Klasse |
|
|
Markus Schaaf wrote:
| Quote: | Thorsten Lück schrieb:
für das Debuggen und loggen wollte ich von ostream eine Klasse ableiten,
um den stream zu splitten:
zum Einen soll als Logfile in ein File geschrieben werden
zum Anderen gleichzeitig auf stdout.
Wo liegt der Fehler?
Du leitest von »ostream« ab, um dessen Verhalten zu ändern, aber das
geht nicht, weil es keine polymorphe Klasse ist. »streambuf« ist die
polymorphe Schnittstelle.
|
Hm, in streambuf (oder filebuf) ist aber der operator "<<" nicht definiert.
Wie kann ich dann - ohne für alle möglichen Typen diesen operator neu zu
definieren - meinen stream aufteilen und sowohl in ein file als auch auf
den stdout streamen?
--
Thorsten Lück
Für persönliche Antwort bitte Unterstrich aus Mail-Addresse entfernen.
For private response please remove underscores from mail-adress.
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Marcel Müller Guest
|
Posted: Wed Nov 19, 2003 5:23 pm Post subject: Re: Seltsames Verhalten bei von ostream abgeleiteter Klasse |
|
|
Hi,
Thorsten Lück wrote:
| Quote: | Hm, in streambuf (oder filebuf) ist aber der operator "<<" nicht definiert.
Wie kann ich dann - ohne für alle möglichen Typen diesen operator neu zu
definieren - meinen stream aufteilen und sowohl in ein file als auch auf
den stdout streamen?
|
class mystreambuf : public streambuf
{...};
mystreambuf sb;
ostream os(sb); // <---
--
Marcel Müller
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Karl Heinz Buchegger Guest
|
Posted: Wed Nov 19, 2003 5:53 pm Post subject: Re: Seltsames Verhalten bei von ostream abgeleiteter Klasse |
|
|
Thorsten Lück wrote:
| Quote: |
Markus Schaaf wrote:
Thorsten Lück schrieb:
für das Debuggen und loggen wollte ich von ostream eine Klasse ableiten,
um den stream zu splitten:
zum Einen soll als Logfile in ein File geschrieben werden
zum Anderen gleichzeitig auf stdout.
Wo liegt der Fehler?
Du leitest von »ostream« ab, um dessen Verhalten zu ändern, aber das
geht nicht, weil es keine polymorphe Klasse ist. »streambuf« ist die
polymorphe Schnittstelle.
Hm, in streambuf (oder filebuf) ist aber der operator "<<" nicht definiert.
|
Das braucht er auch nicht.
Das stream Objekt sammelt den ganzen Output und uebergibt es dann seinem
streambuf, der die ehrenvolle Aufgabe hat, das gesammelte Machwerk an
das Geraet weiterzuleiten.
| Quote: | Wie kann ich dann - ohne für alle möglichen Typen diesen operator neu zu
definieren - meinen stream aufteilen und sowohl in ein file als auch auf
den stdout streamen?
|
Indem Du dem stream einen neuen streambuf zuweist der genau das macht:
sowohl in ein file als auch nach stdout.
Jedes stream Objekt besitzt einen streambuf. Das ist ganz einfach Teil
der Arbeitsteilung zwischen den beiden:
Der stream ist fuer die Formattierung zustaendig
Der streambuf ist fuer das weiterleiten zustaendig.
Such mal nach Postings von 'Dietmar Kuehl'. Der hat des oefteren in
comp.lang.c++ Beispiele gepostet, was man da so alles treiben kann.
geh auf Google (wohin auch sonst , such in den Gruppen nach
"stream streambuf c++ kuehl"
gleich der erste Link ist ein Volltreffer.
--
Karl Heinz Buchegger
[email]kbuchegg (AT) gascad (DOT) at[/email]
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
Karl Heinz Buchegger Guest
|
Posted: Wed Nov 19, 2003 5:58 pm Post subject: Re: Seltsames Verhalten bei von ostream abgeleiteter Klasse |
|
|
Thorsten Lück wrote:
| Quote: |
Hm, in streambuf (oder filebuf) ist aber der operator "<<" nicht definiert.
Wie kann ich dann - ohne für alle möglichen Typen diesen operator neu zu
definieren - meinen stream aufteilen und sowohl in ein file als auch auf
den stdout streamen?
|
Geh zu
http://www.google.com
klicke auf 'Groups'
in's Suchfeld gibst Du ein
stream streambuf C++ kuehl
gleich der erste Link ist ein Volltreffer
--
Karl Heinz Buchegger
[email]kbuchegg (AT) gascad (DOT) at[/email]
--
de.comp.lang.iso-c++ - Moderation: mailto:voyager+mod (AT) bud (DOT) prima.de
FAQ: http://www.voyager.prima.de/cpp/ mailto:voyager+send-faq (AT) bud (DOT) prima.de
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|