Bonjour à tous.
je dois modifier un programme en C++, ma modification à pour objet de générer un fichier qui soit la copie de ce qui est affiché sur l'écran. Malheureusement, je n'y connais rien en C++ et je bute sur un message d'erreur.
Pour le moment, j'ai créer une classe qui permet de surcharger l'opérateur << pour afficher écrire à la fois sur la console et dans un fichier .
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 #ifndef MSTREAM_HPP_ #define MSTREAM_HPP_ #include <iostream> #include <fstream> class mstream { public: std::ofstream coss; mstream(char * fileName); ~mstream(void); template <class T> mstream& operator<< (T val) { coss << val; std::cout << val; return *this; } }; #endif /* MSTREAM_HPP_ */et un exemple d'utilisation
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 #include <iostream> #include "mstream.hpp" using namespace std; mstream::mstream(char * fileName) { coss.open(fileName,ios::out); if (!coss.is_open()) { std::cout << "Impossible d'ouvrir le fichier trace" << endl; } } mstream::~mstream(void) { if (coss.is_open()) { coss.flush(); coss.close(); } }
Ici, pas de problème ; je peux afficher dans l'écran et dans un fichier un message. mais par contre, je peux pas utiliser le endl comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 #include <iostream> #include "mstream.hpp" using namespace std; int main(int argc, char * argv[]) { mstream * messageTracer = new mstream("titi.txt"); cout << endl; *messageTracer << "c'est fini" << "\n"; delete messageTracer; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2*messageTracer << "c'est fini" << endl;
j'ai donc rajouté une nouvelle surcharge de l'opérateur comme ceci:
mais cela ne veut pas compiler, j'obtiens les messages suivants sous eclipse:
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 #ifndef MSTREAM_HPP_ #define MSTREAM_HPP_ #include <iostream> #include <fstream> class mstream { public: std::ofstream coss; mstream(char * fileName); ~mstream(void); template <class T> mstream& operator<< (T val) { coss << val; std::cout << val; return *this; } // Pour la gestion du endl template <class T> mstream& operator<< (mstream& (*pfun)(mstream&)) { pfun(coss); pfun(std::cout); return *this; } }; #endif /* MSTREAM_HPP_ */
Qui peut me débloquer
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 In file included from ..\src\main.cpp:2: ..\src\mstream.hpp: In member function `mstream& mstream::operator<<(mstream&(*)(mstream&))': ..\src\mstream.hpp:29: error: invalid initialization of reference of type 'mstream&' from expression of type 'std::ofstream' ..\src\mstream.hpp:30: error: invalid initialization of reference of type 'mstream&' from expression of type 'std::ostream'
merci
Partager