Bonjour à tous,

Je suis actuellement en train d'écrire un logger pour mon projet et pour qu'il soit le plus simple à utiliser j'ai décidé de surcharger << pour écrire dedans. Le problème que j'ai, est que j'obtiens une erreur de compilation quand je veux revenir à la ligne par std::endl. Je ne comprends pas vraiment pourquoi, c'est pourquoi je solicite votre aide.

J'utilise Visual C++ 2005 Express

Voici la surcharge de mon opérateur <<, à priori, relativement standard

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
template <class T> CLogger& CLogger::operator <<( const T& _strLog )
{
    // Si on est en début de ligne, on affiche l'heure. On regarde donc si le précédent
    // caractère est un retour chariot "\n"
 
    long pos = m_File.tellp();        // On récupère la position du pointeur put
    m_File.seekg( pos-1 );            // On positionne le pointeur get un caractère avant
    char prev_char = m_File.peek();    // Le caractère précédent
    m_File.seekp( pos );    // On repositionne le pointeur put à sa position d'écriture
 
    if ( prev_char == '\n' )
    {
        m_File << "[" << CurrentTime() << "]: ";
    } // if
 
    // Puis on logg le message
    m_File << _strLog;
 
    return *this;
 
} // operator <<
En ce qui concerne l'utilisation, voici le code pour executer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "Logger.hpp"
#include <iostream>
#include <string>
using namespace std;
 
 
void main()
{
    CLogger* logger = new CLogger();
    *logger << "prout " << "pouet \n";
    *logger << std::endl;
    *logger << "nouvelle ligne, nouveau challenge\n";
    delete logger;
}
Et finalement la sortie du compilo. Je précise que je n'ai aucune erreur quand j'enlève la ligne contenant endl;

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
31
32
33
34
35
36
37
38
------ Début de la régénération globale : Projet : AM_Tools, Configuration : Debug Win32 ------
Suppression des fichiers de sortie et des fichiers intermédiaires du projet 'AM_Tools', configuration 'Debug|Win32'
Compilation en cours...
Logger.cpp
Main.cpp
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'CLogger &CLogger::operator <<(const T &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
        d:\mes documents\visual studio 2005\projects\am_tools\am_tools\logger.hpp(15) : see declaration of 'CLogger::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'CLogger &CLogger::operator <<(const T &)' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
        d:\mes documents\visual studio 2005\projects\am_tools\am_tools\logger.hpp(15) : see declaration of 'CLogger::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2896: 'CLogger &CLogger::operator <<(const T &)' : cannot use function template 'std::basic_ostream<_Elem,_Traits> &std::endl(std::basic_ostream<_Elem,_Traits> &)' as a function argument
        c:\program files\microsoft visual studio 8\vc\include\ostream(937) : see declaration of 'std::endl'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for 'std::basic_ostream<_Elem,_Traits> &' from 'CLogger'
        c:\program files\microsoft visual studio 8\vc\include\string(538) : see declaration of 'std::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'std::basic_ostream<char,_Traits> &std::operator <<(std::basic_ostream<char,_Traits> &,unsigned char)' : could not deduce template argument for 'std::basic_ostream<char,_Traits> &' from 'CLogger'
        c:\program files\microsoft visual studio 8\vc\include\ostream(927) : see declaration of 'std::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'std::basic_ostream<char,_Traits> &std::operator <<(std::basic_ostream<char,_Traits> &,const unsigned char *)' : could not deduce template argument for 'std::basic_ostream<char,_Traits> &' from 'CLogger'
        c:\program files\microsoft visual studio 8\vc\include\ostream(920) : see declaration of 'std::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'std::basic_ostream<char,_Traits> &std::operator <<(std::basic_ostream<char,_Traits> &,signed char)' : could not deduce template argument for 'std::basic_ostream<char,_Traits> &' from 'CLogger'
        c:\program files\microsoft visual studio 8\vc\include\ostream(913) : see declaration of 'std::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'std::basic_ostream<char,_Traits> &std::operator <<(std::basic_ostream<char,_Traits> &,const signed char *)' : could not deduce template argument for 'std::basic_ostream<char,_Traits> &' from 'CLogger'
        c:\program files\microsoft visual studio 8\vc\include\ostream(906) : see declaration of 'std::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,_Elem)' : could not deduce template argument for 'std::basic_ostream<_Elem,_Traits> &' from 'CLogger'
        c:\program files\microsoft visual studio 8\vc\include\ostream(868) : see declaration of 'std::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const _Elem *)' : could not deduce template argument for 'std::basic_ostream<_Elem,_Traits> &' from 'CLogger'
        c:\program files\microsoft visual studio 8\vc\include\ostream(822) : see declaration of 'std::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'std::basic_ostream<char,_Traits> &std::operator <<(std::basic_ostream<char,_Traits> &,char)' : could not deduce template argument for 'std::basic_ostream<char,_Traits> &' from 'CLogger'
        c:\program files\microsoft visual studio 8\vc\include\ostream(782) : see declaration of 'std::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'std::basic_ostream<char,_Traits> &std::operator <<(std::basic_ostream<char,_Traits> &,const char *)' : could not deduce template argument for 'std::basic_ostream<char,_Traits> &' from 'CLogger'
        c:\program files\microsoft visual studio 8\vc\include\ostream(735) : see declaration of 'std::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,char)' : could not deduce template argument for 'std::basic_ostream<_Elem,_Traits> &' from 'CLogger'
        c:\program files\microsoft visual studio 8\vc\include\ostream(697) : see declaration of 'std::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const char *)' : could not deduce template argument for 'std::basic_ostream<_Elem,_Traits> &' from 'CLogger'
        c:\program files\microsoft visual studio 8\vc\include\ostream(650) : see declaration of 'std::operator <<'
d:\mes documents\visual studio 2005\projects\am_tools\am_tools\main.cpp(11) : error C2676: binary '<<' : 'CLogger' does not define this operator or a conversion to a type acceptable to the predefined operator
Generating Code...
Le journal de génération a été enregistré à l'emplacement "file://d:\Mes Documents\Visual Studio 2005\Projects\AM_Tools\AM_Tools\Debug\BuildLog.htm"
AM_Tools - 15 erreur(s), 0 avertissement(s)
========== Régénération globale : 0 a réussi, 1 a échoué, 0 a été ignoré ==========
Je vous remercie par avance de votre aide. Si il s'avère que je ne peux pas utiliser endl dans ce cas, tant pis mais ça me ferait changer mes habitudes :p