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 nachrichten 😮

    vielleicht 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 nachrichten 😮

    Dann 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 nachrichten 😮

    Dann 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 funktioniert

    auf 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 methodvoid 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.


Anmelden zum Antworten