Bonjour à tous
Je cherche à créer une classe qui me permettrait d'écrire dans un fichier externe à mon application.
Je me suis inspiré de celle que crée Laurent Gomilla dans Yes::Engine mais celle-ci est un singleton. Or je souhaite pouvoir créer et écrire dans plusieurs fichiers à différents moments de mon application.
Non expert en C++ j'essaie de faire la ma mienne pour progresser. J'ai gardé son idée d'opérator "<<" où par exemple il fait :
Voici ma classe :Code:
1
2
3 CLoggerFile Logger* = new CLOggerFile("Log.log"); Logger->setLogger(Logger); Logger->Log() << "Quel beau log " << " \n";
et les déclarations :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class CMyLogger { public: CMyLogger(const std::string& Filename = "Output.log"); ~CMyLogger(void); template <class T> CMyLogger* operator <<(const T& ToLog); private: std::ofstream m_File; string filename; void Write(const std::string& Message); protected : std::string CurrentDate() const; std::string CurrentTime() const; };
Code:
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
39
40
41
42
43
44
45
46
47
48
49 CMyLogger::CMyLogger(const std::string& Filename):m_File(Filename.c_str()) { if (!m_File) printf("Impossible d'accéder en écriture : %s \n",Filename); // Ecriture de l'en-tête du fichier m_File << " ===========================================" << std::endl; filename = Filename; } CMyLogger::~CMyLogger(void) { } template <class T> CMyLogger* CMyLogger::operator <<(const T& ToLog) { std::ostringstream Stream; Stream << ToLog; Write(Stream.str()); } std::string CMyLogger::CurrentDate() const { // Récupération et formatage de la date char sTime[24]; time_t CurrentTime = time(NULL); strftime(sTime, sizeof(sTime), "%d/%m/%Y", localtime(&CurrentTime)); return sTime; } std::string CMyLogger::CurrentTime() const { // Récupération et formatage de la date char sTime[24]; time_t CurrentTime = time(NULL); strftime(sTime, sizeof(sTime), "%H:%M:%S", localtime(&CurrentTime)); return sTime; } void CMyLogger::Write(const std::string& Message) { assert(m_File.is_open()); m_File << Message << std::flush; }
Le petit bout de code suivant :
provoque les erreurs sous VC8:Code:
1
2 CMyLogger* Logger = new CMyLogger("Kx.log"); Logger << "Welcome" << "\n";
Citation:
error C2296: '<<' : illegal, left operand has type 'CMyLogger *'
error C2297: '<<' : illegal, right operand has type 'const char [9]'
Pourriez-vous m'indiquer mes erreurs et la bonne direction à prendre svp ?