WxWidgets écriture dans fichier
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:
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:
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:
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:
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 ;
}
} |
quand j'essaye de compiler le programme ,j'ai des erreurs :
Code:
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 |
Pouvez vous me dire où se trouve mon erreur?
Merci de votre compréhension.