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:
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 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
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 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
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;
}
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
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 l’ouverture 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 ;
  }
 
}
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
 
mainframe.cpp: In member function ‘void MainFrame::OnSave(wxCommandEvent&)’:
mainframe.cpp:216: error: ambiguous overload foroperator<<’ 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
Pouvez vous me dire où se trouve mon erreur?

Merci de votre compréhension.