ofstream in klasse fnktioniert nicht?
-
#include <string> #include <iostream> #include <fstream> #include <signal.h> #include <sstream> #include <errno.h> using namespace std; class flog { public: flog() { //dummy } flog(string file, int tempdebug) { debug = tempdebug; if (debug == 0) { //path = "/var/log/" + file; path = file; fileh.open(path.c_str(), ios_base::app); if (!fileh) interror(); } } void file(string file, int tempdebug) { debug = tempdebug; if (debug == 0) { //path = "/var/log/" + file; path = file; fileh.open(path.c_str(), ios_base::app); if (!fileh) interror(); } } void error(string tempmsg) { string msg = "ERROR: " + tempmsg + " " + "[" + strerror(errno) + "]\n"; if (debug == 1) cout << msg << flush; else add(msg); exit(0); } void message(string tempmsg) { string msg = "MESSAGE: " + tempmsg + "\n"; if (debug == 1) cout << msg << flush; else add(msg); } private: ofstream fileh; string path; int debug; void add(string msg) { fileh << fdate() << " " << ftime() << msg << "\n"; fileh.flush(); } string fdate() { time_t now = time(NULL); tm z = *(localtime(&now)); int d = z.tm_mday; int m = z.tm_mon; int y = z.tm_year; stringstream temp; temp << d << "." << m << "." << y; return temp.str(); } string ftime() { time_t now = time(NULL); tm z = *(localtime(&now)); int h = z.tm_hour; int m = z.tm_min; int s = z.tm_sec; stringstream temp; temp << h << ":" << m << ":" << s; return temp.str(); } void interror() { cout << path << " kann nicht geoeffnet werden [" << strerror(errno) << "]" << endl; exit(0); } };
fileh hat immer den wert 0 obwohl dieser 0x... sein sollte (wenn das objekt mit argumenten erzeugt wird oder die methode file aufgerufen wird)
darum kommt ständig die fehlermeldung (siehe code)datei gibt es natürlich...auserhalb der klasse klappt es ohne probleme
stimmt was mit den überladenen konstruktoren nicht?
hilfe bitte
-
Autsch, versuchst Du da etwa, manuell nach /var/log zu schreiben?
Verwende bitte den man: syslog, dafür ist er da.
-
nman schrieb:
Autsch, versuchst Du da etwa, manuell nach /var/log zu schreiben?
Verwende bitte den man: syslog, dafür ist er da.mit dem hab ich probleme
nach einigen tagen laufzeit sendet der chatserver plötzlich die syslog meldungen per tcpip anstatt die nachrichtenvielleicht ist es nicht ganz der richtige weg
aber warum klappt dieses beispiel nicht?
-
debian inside schrieb:
mit dem hab ich probleme
nach einigen tagen laufzeit sendet der chatserver plötzlich die syslog meldungen per tcpip anstatt die nachrichtenDann hast Du Mist gebaut und solltest lieber die Fehler die Du dabei gemacht hast korrigieren, statt sie anders mit einem total verkorksten Design zu umgehen.
-
nman schrieb:
debian inside schrieb:
mit dem hab ich probleme
nach einigen tagen laufzeit sendet der chatserver plötzlich die syslog meldungen per tcpip anstatt die nachrichtenDann hast Du Mist gebaut und solltest lieber die Fehler die Du dabei gemacht hast korrigieren, statt sie anders mit einem total verkorksten Design zu umgehen.
ja ist mir klar das es nicht ok sein kann...bin ja auch blutiger anfänger
wie komm ich zu nem schönen objektorientierten design?
reichen da die grundlagen? oder kann mir jemand ein buch empfehlen?kannst du mir bitte trozdem sagen was so falsch an dem beispiel ist oder ist es wirklich so viel?
-
Er meint nur, dass du nicht händisch ins syslog schreiben sollst sondern syslog verwenden wie es gedacht ist. Wenn es nicht funktioniert, dann konfiguriere es so, dass es funktioniert.
-
ok danke
ich hab jetzt eingesehen das es nicht der richtige weg ist
jedoch würde mich jetzt noch interessieren wieso das teil unter debian sarge testing funktioniertauf debian woody stable jedoch folgende meldungen kommen:
logging.cpp: In method
flog::flog(basic\_string<char,string\_char\_traits<char>,\_\_default\_alloc\_template<true,0> >, int)': logging.cpp:28:
ios_base' undeclared (first use this function)
logging.cpp:28: (Each undeclared identifier is reported only once
logging.cpp:28: for each function it appears in.)
logging.cpp:28: parse error before::' logging.cpp: In method
void flog::file(basic_string<char,string_char_traits<char>,__default_alloc_template<true,0> >, int)':
logging.cpp:39: parse error before `::'danke
[EDIT] wenn man statt ios_base nur ios verwendet klappt es
hatte ios_base aus dem buch c++ entwicklung mit linux von thomas wieland entnommen
-
Naja, Woody ist ja absolut steinzeitlich, da ist IMO einfach noch eine 2.95er GCC drauf.