endl selber machen



  • Hallo,

    ich habe eine Log-Klasse geschrieben, die den <<-Operator überladen hat. Also damit es genauso zu handhaben ist wie mit cout etc. Wie kann man jetzt ein eigenes endl machen?



  • Du kannst das nomale std::endl nehmen.



  • Das funktioniert nicht!

    error C2784: 'class std::basic_ostream<_E,_Tr> &__cdecl std::operator <<(class std::basic_ostream<_E,_Tr> &,const class std::basic_string<_E,_Tr,_A> &)' : Vorlagenargument fuer 'class std::basic_ostream
    <_E,_Tr> &' von 'class CLog_' konnte nicht hergeleitet werden



  • Hallo,
    zeig doch bitte mal ein minimales Code-Beispiel, dass den Fehler demonstriert.
    Mir scheint du hast da was mit dem Rückgabewert verwurschtelt.



  • gerne:

    class CLog_
    {
    	private:
    		std::ofstream outstream;
    		CLog_(void);	//Von der Klasse darf man selbst kein Objekt erstellen
    
    	public:
    		~CLog_(void);
    		static CLog_& instance(void);
    
    		template <class T>
    		CLog_& operator<< (const T &Type)
    		{
    			outstream<<Type;
    			outstream.flush();
    			return *this;
    		}
    };
    


  • Mir scheint du hast da was mit dem Rückgabewert verwurschtelt

    template <class T>
    CLog_& operator<< (const T &Type)

    Sehen se 🙂

    CLog_ besitzt keinen operator<< der ein Argument vom Typ ostream& (*)(ostream&) akzeptiert.
    Dein op<< muss entweder ein ostream& liefern oder du brauchst einen weiteren op<<.

    class Clog_
    {
    ...
    CLog_& operator<< (std::ostream& (*p)(std::ostream&))
    {
        p(outstream);
        return *this;
    }
    ...
    };
    

Anmelden zum Antworten