bonjour, je n'arrive pas à résoudre un problème concernant l'écriture de données (concernant des cercles, couleur, épaisseur du trait,centre, rayon...)dans un fichier. J'essaye de récupérer ces donnée a partir d'un vecteur que j'ai nommé_tab_circle et de les écrire dans un fichier.
Voici la classe Mainframe:
Voici la class circle.h:
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 class MainFrame: public wxFrame { public: //Constructeur & Destrucuteur MainFrame(const wxString& title, const wxPoint& pos, const wxSize& size); ~MainFrame(); void onInit(); private: bool is_drawing; int _num_circle; std::vector<Circle> _tab_circle; DECLARE_EVENT_TABLE(); }; //MainFrame
Voici le fichier circle.cpp:
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
39 #ifndef CIRCLE_H #define CIRCLE_H #include <wx/wx.h> class Circle { public: Circle(); Circle(wxPoint center, int radius, wxColor colour, int thickness); Circle(const Circle& t); ~Circle(); void setCenter(const wxPoint& val) { _center = val; } wxPoint center() const { return _center; } void setRadius(int val) { _radius = val; } int radius() const { return _radius; } void setColour(const wxColor& val) { _colour = val; } wxColor colour() const { return _colour; } void setThickness(int val) { _thickness = val; } int thickness() const { return _thickness; } Circle& operator=(const Circle &t); protected: wxPoint _center; int _radius; wxColor _colour; int _thickness; }; #endif
Voici la fonction dans laquelle on vas commencer a écrire les données 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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 #include "circle.h" Circle::Circle() { } Circle::Circle(wxPoint center, int radius, wxColor colour, int thickness) { _center = center; _radius = radius; _colour = colour; _thickness = thickness; } Circle::Circle(const Circle& t) { _center = t.center(); _radius = t.radius(); _colour = t.colour(); _thickness = t.thickness(); } Circle::~Circle() { } Circle& Circle::operator=(const Circle &t) { if(&t != this) { _center = t.center(); _radius = t.radius(); _colour = t.colour(); _thickness = t.thickness(); } return *this; }
quand j'essaye de compiler le programme ,j'ai des erreurs :
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 void MainFrame::OnSave(wxCommandEvent& event) { int red, green, blue; int i; int _num_circle =_tab_circle.size(); wxFileDialog filedialog( this, wxT("Save"), wxT("./save/"), wxEmptyString, wxT("*"), wxSAVE | wxOVERWRITE_PROMPT ); filedialog.ShowModal(); // Ouvre le fichier en ecriture wxFileOutputStream file (filedialog.GetPath() ) ; // Test si louverture a reussi if (file .IsOk( )) { // Transforme le fichier en un flux de texte wxTextOutputStream out( file ) ; // Ici les commandes pour ecrire out <<_num_circle; out << wxT("\n"); if( _num_circle > 0) { for( i = 0 ; i < _num_circle; i++) { red = _tab_circle.at(i).colour().Red(); green = _tab_circle.at(i).colour().Green(); blue = _tab_circle.at(i).colour().Blue(); out << _tab_circle.at(i).center().x << " " << _tab_circle.at(i).center().y << " "<< _tab_circle.at(i).radius()<< out << wxT("\n"); out << red << " " << green << " " << blue << out << wxT("\n"); out << _tab_circle.at(i).thickness() << out << wxT("\n"); } } } else { wxString errormsg, caption; errormsg.Printf(wxT("Unable to open file ")); errormsg.Append(filedialog.GetPath()); caption.Printf(wxT("Erreur")); wxMessageDialog msg( this, errormsg, caption, wxOK | wxCENTRE | wxICON_ERROR ); msg.ShowModal(); return ; } }
Pouvez vous me dire où se trouve mon erreur?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 mainframe.cpp: In member function void MainFrame::OnSave(wxCommandEvent&): mainframe.cpp:216: error: ambiguous overload for operator<< in out.wxTextOutputStream::operator<<(((Circle*)((MainFrame*)this)->MainFrame::_tab_circle.std::vector<_Tp, _Alloc>::at [with _Tp = Circle, _Alloc = std::allocator<Circle>](((unsigned int)i)))->Circle::center().wxPoint::x) << " " /usr/include/wx-2.8/wx/txtstrm.h:131: note: candidates are: wxTextOutputStream& wxTextOutputStream::operator<<(const wxString&) <near match> /usr/include/wx-2.8/wx/txtstrm.h:132: note: wxTextOutputStream& wxTextOutputStream::operator<<(char) <near match> /usr/include/wx-2.8/wx/txtstrm.h:134: note: wxTextOutputStream& wxTextOutputStream::operator<<(wchar_t) <near match> /usr/include/wx-2.8/wx/txtstrm.h:136: note: wxTextOutputStream& wxTextOutputStream::operator<<(wxInt16) <near match> /usr/include/wx-2.8/wx/txtstrm.h:137: note: wxTextOutputStream& wxTextOutputStream::operator<<(wxInt32) <near match> /usr/include/wx-2.8/wx/txtstrm.h:138: note: wxTextOutputStream& wxTextOutputStream::operator<<(wxUint16) <near match> /usr/include/wx-2.8/wx/txtstrm.h:139: note: wxTextOutputStream& wxTextOutputStream::operator<<(wxUint32) <near match> /usr/include/wx-2.8/wx/longlong.h:1071: note: wxTextOutputStream& operator<<(wxTextOutputStream&, long long int) <near match> /usr/include/wx-2.8/wx/longlong.h:1070: note: wxTextOutputStream& operator<<(wxTextOutputStream&, long long unsigned int) <near match> make: *** [mainframe.o] Erreur 1
Merci de votre compréhension.
Partager