Bonjour,
Je suis en train dŽecrire un petit soft pour des raisons affectives. Dans une vie anterieure (en these) jŽai ecrit un petit programme c++ pour faire mes calculs, que je voudrais rendre utilisable par dŽautre, grace a une jolie interface - presque finie - ecrite avec wxWidgets. Seulement voila, il faut faire tourner mon petit programme dŽavant - bete mode console - puisque cŽest lui qui devrait produire les resultats a afficher avec wxChart (la partie tracee est pas encore commencee, et pour cause : il nŽy a rien a tracer). Je suis en train dŽessayer quelques trucs, mais je rencontre un petit probleme delicat : ca plante...
Pour le moment, ce que jŽai fait, cŽest creer dans mon objet freevol_frame un objet membre de type essai_saut, cad la classe que jŽai creer pour faire mes calculs. Evidemment, essai_saut cŽest du c++ de base, avec des doubles, des int des tableaux de double, etc. Pour lŽinstant, jŽai modestement cree un bouton de type OK auquel jŽai lie comme event une fonction membre de freevol_frame, evidemment. Cette fonction membre doit initialiser lŽobjet essai_saut (valeurs des parametres). Pour le moment ca se fait dans le programme, sans recuperer de valeurs de lŽutilisateur, mais ca plante deja... Je ne sais pas trop ce que je dois faire ? Si quelquŽun a des suggestions...
Ci-dessous des extraits du code :
---------------------------------------------------------------------
freevol_frame.h :
---------------------------------------------------------------------
Code : C++
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70 #ifndef _FREEVOLFRAME_H_ #define _FREEVOLFRAME_H_ #include "freevol_model.h" #include <wx/listctrl.h> #include <wx/button.h> class wxFreeVolFrame: public wxFrame { DECLARE_EVENT_TABLE() //table des événements public: wxFreeVolFrame(wxWindow* parent, wxWindowID id = -1, const wxString& caption = _("FreeVol v0.1"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,long style = wxDEFAULT_FRAME_STYLE); ~wxFreeVolFrame(); bool Create(wxWindow* parent, wxWindowID id = -1, const wxString& caption = _("FreeVol v0.1"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_FRAME_STYLE); protected: // l´objet du probleme : issu de la class essai_saut, qui peut faire les calculs essai_saut* essai; void CreateMenu(); void CreateControls(); void OnMnuQuit(wxCommandEvent& event); void OnButtonOKG(wxCommandEvent& event); private: // textctrl pour menu de la partie gauche de la fenetre principale + bouton OK wxTextCtrl* m_ctrl_ax; wxTextCtrl* m_ctrl_kr; wxTextCtrl* m_ctrl_ceq; wxTextCtrl* m_ctrl_V; wxTextCtrl* m_ctrl_epoc; wxTextCtrl* m_ctrl_E; wxTextCtrl* m_ctrl_T; wxTextCtrl* m_ctrl_cfi; wxButton* boutonOKG; // textctrl (temporaire) pour la partie droite wxTextCtrl* m_PtieDroite; wxMenu* m_MnuFile; wxMenu* m_MnuSteady; wxMenu* m_MnuHelp; wxString m_ax; wxString m_kr; wxString m_ceq; wxString m_V; wxString m_epoc; wxString m_E; wxString m_T; wxString m_cfi; }; #endif // _FREEVOLFRAME_H_
------------------------------------------------------------
La fonction qui plante dans freevol_frame.cpp : celle appelee par lŽevent du bouton OK (il nŽy a que des initialisations, esentiellement, et le squelette de la fonction pour quand tout ira bien en commentaires):
------------------------------------------------------------
Code : C++
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 void wxFreeVolFrame::OnButtonOKG(wxCommandEvent& event) { essai = new essai_saut; //vérifie qu'il y a bien un parcours meca (drapeau) sinon, le signale et skip, /* cfinit= 1e-12 n= 0 sigmainit= 0 Et_int1= 0 pcision= 1e-3 k= 1.38e-23 */ essai->ax = 0.1; //récupère les valeurs des paramètres m_ax = m_ctrl_ax->GetValue(); m_kr = m_ctrl_kr->GetValue(); m_ceq = m_ctrl_ceq->GetValue(); m_V = m_ctrl_V->GetValue(); m_epoc = m_ctrl_epoc->GetValue(); m_E = m_ctrl_E->GetValue(); m_T = m_ctrl_T->GetValue(); m_cfi = m_ctrl_cfi->GetValue(); //convertit les valeurs en double //assigne les valeurs à l'objet modele et lance le calcul essai->ax = 0.1; essai->kr = 0.1; essai->cf_eq = 1e-12; essai->Cf_int1 = 1e-12; essai->invcfinit = essai->Cf_int1; essai->Ep0c = 2.81E8; essai->T = 683; essai->E = 10e9; essai->V = 160E-30; //affiche le résultat, change un drapeau pour permettre enregistrement du fichier résultat event.Skip(); }
---------------------------------------------------------
Le fichier freevol_model.h qui contient la classe essai_saut :
---------------------------------------------------------
Code : C++
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
57
58 #ifndef _FREEVOLMODEL_H_ #define _FREEVOLMODEL_H_ #include <math.h> #include <string.H> #include <stdio.h> #include <fstream> #include <iostream.h> #include <time.h> #include <stdlib.h> struct res_calcul { float sigma_int1, Cf_int1, Et_int1; int n; }; struct prmsauts { float prmepp[10]; float prmep[10]; int J; }; struct manip { float cont[1000]; float def[1000]; float temps[1000]; int tai; }; class essai_saut { public : int n, N, j, J, i, kontrole; double Ep0c, V, k, T, E, ax, kr, cf_eq, dt; double Cf[10000], sigma[10000], Eppe[10000], Et[10000], temps[10000]; double Ept, pcision; double prm[20], epsilon[10], epsilon_point[10],relax[10]; res_calcul Tempo ; double Cf_int1 , invcfinit; double ax_sur_kr; prmsauts param ; int Enregistre(int); int essai(); res_calcul calcul_modele(int ni, double sigma_int1, double Cf_int1, double Et_int1, double Ept, double pcision, double dmanip); double creani(double c, double epp); }; #endif // _FREEVOLMODEL_H_
------------------------------------------------
Voila, je sais pas si cŽest tres clair... ?
Bien cordialement,
Hugo