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 : 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
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 : 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
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 : 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
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