En fait, je n'ai pas mis le detail des fichiers, car ceci est une version suivante d'un programme qui a deja marché... (version 0.9, et la version 0.8 marchait bien). J'ai essayé de mettre les fichiers inductance.h et inductance.cpp, ainsi que equation.h et equation.cpp dans l'ancienne version, et cela marche parfaitement ! Donc en fait, il semble qu'une modification de classes externes (et "equation" n'herite de rien) ait fait que cela ne marche plus, et seulement pour "inductance" et pas pour les autres classes qui sont semblables a "inductance"... pour ce qui est du code, voila ce que cela donne:
et
class equation
{
public:
QString message;
enum FieldFlags {GRT_INDEX_MASK=127, IS_GRT_THAN=128, IS_HIDDEN=256, IS_INTEGER=512, IS_POSITIVE=1024, IS_NEGATIVE=2048};
public:
virtual ~equation() { }
virtual double f(void); //in fact, F must be f(x)-y=0, so solving it for 0 finds x such as y=f(x)
double df(int index_deri);
int Newton(int index_to_solve,double guess);
virtual int solve(int index_to_solve);
public:
double parameters[MAX_EQ_PARAMETERS];
double guess[MAX_EQ_PARAMETERS]; //initial values of the parameters for the solvers
int constraints[MAX_EQ_PARAMETERS]; //solving constraints
protected:
short int nb_params;
};
Evidement, dans les cpp associés, je déclare mes fonctions de la façon suivante:
double inductance::f(void) {}
[^] # Re: Des détails, des détails :-)
Posté par Mathias Bavay (site web personnel) . En réponse au message problème d'acces à une méthode. Évalué à 1.
class inductance : public equation
{
public:
double L;
double C;
QString message;
public:
inductance();
int setType(int choice);
double f(void);
void CalculateLandC(void);
double parallele_wires(void);
double coaxial_line(void);
double strip_line(void);
double converging_line(void);
double disks(void);
double rectangular_coil(void);
double helix(void);
double L2C(void);
double C2L(void);
private:
int setTabKsh(void);
int setTabKl(void);
int setTabN(void);
int setTabG(void);
double Ksh(double a);
double Kl(double a);
double Ns(double a);
double Gs(double a);
private:
enum InductanceType {ParalleleWires, CoaxialLine, StripLine, ConvergingLine, Disks, RectangularCoil, Helix};
InductanceType type;
tabulation tab_Ksh;
tabulation tab_Kl;
tabulation tab_N;
tabulation tab_G;
};
et
class equation
{
public:
QString message;
enum FieldFlags {GRT_INDEX_MASK=127, IS_GRT_THAN=128, IS_HIDDEN=256, IS_INTEGER=512, IS_POSITIVE=1024, IS_NEGATIVE=2048};
public:
virtual ~equation() { }
virtual double f(void); //in fact, F must be f(x)-y=0, so solving it for 0 finds x such as y=f(x)
double df(int index_deri);
int Newton(int index_to_solve,double guess);
virtual int solve(int index_to_solve);
public:
double parameters[MAX_EQ_PARAMETERS];
double guess[MAX_EQ_PARAMETERS]; //initial values of the parameters for the solvers
int constraints[MAX_EQ_PARAMETERS]; //solving constraints
protected:
short int nb_params;
};
Evidement, dans les cpp associés, je déclare mes fonctions de la façon suivante:
double inductance::f(void) {}
Mathias