pointeur sur function dans le class - C++ - Programmation
Marsh Posté le 27-07-2009 à 13:31:35
Tu peux pas mélanger pointeurs de fonctions et pointeurs de fonctions membres: tu dois passer par une abstration genre bind, mem_fun, voire la bibliothèque externe boost.
Y a plein de sujets et d'exemple sur le forum.
Marsh Posté le 27-07-2009 à 13:44:24
Code :
|
Marsh Posté le 27-07-2009 à 13:45:28
En fait c'est juste la signature de ta Jacobian_binaire qui n'est pas conforme à ce que tu veux en faire.
Marsh Posté le 28-07-2009 à 10:25:24
Je faisait d`autre choise:
class interface
{
public:
interface *func;
void(interface::*nrfuncv)(int, std::vector <double> &Y, std::vector <double> &F, std::vector <double> &concentration);
void binaire(int, std::vector <double> &Y, std::vector <double> &F, std::vector <double> &concentration);
void Jacobian_binaire(std::vector <double> &Y, std::vector <double> &F, std::vector <std::vector <double> > &Jacobian2D, std::vector <double> &concentration);
interface()
{
func=NULL;
}
}
void interface::Jacobian_binaire(std::vector <double> &Y, std::vector <double> &F, std::vector <std::vector <double> > &Jacobian2D, std::vector <double> &concentration)
{
(func->*nrfunc)(n,Y,F,concentration);
}
dans main.cpp
interface in;
int i = 1;
while (mat.produit[i]!=0)
{
in.func=mat.produit[1]->frontiere[1];
in.nrfunc=interface::binaire;
}
ca me donne "Segmentation fault"
Marsh Posté le 28-07-2009 à 10:32:11
C'est important pour mes fonctions que cette fonction s'herites de la classe interface
void(interface::*nrfuncv)(int, std::vector <double> &Y, std::vector <double> &F, std::vector <double> &concentration);
Marsh Posté le 27-07-2009 à 13:06:10
il y class
class phase
{
public:
phase();
interface *frontiere;
}
class interface
{
public:
interface();
interface (phase *, phase *);
void binaire(int, std::vector <double> &Y, std::vector <double> &F, std::vector <double> &concentration);
void Jacobian_binaire(std::vector <double> &Y, std::vector <double> &F, std::vector <std::vector <double> > &Jacobian2D, std::vector <double> &concentration, void(*nrfunc)(int, std::vector <double> &Y, std::vector <doubl//e> &F, std::vector <double> &concentration));
}
//J`appele cette function
void::interface::Jacobian_binaire(std::vector <double> &Y, std::vector <double> &F, std::vector <std::vector <double> > &Jacobian2D, std::vector <double> &concentration, void(*nrfunc)(int, std::vector <double> &Y, std::vector <double> &F, std::vector <double> &concentration))
{
(*nrfunc)(int, std::vector <double> &Y, std::vector <double> &F, std::vector <double> &concentration);
}
//class newt
class newt
{
public:
interface *func;
interface *jacobian;
void (interface::*nrfuncv)(int, std::vector <double> &Y, std::vector <double> &F, std::vector <double> &concentration);
void (interface::*jacobfunc(std::vector <double> &Y, std::vector <double> &F, std::vector <std::vector <double> > &Jacobian2D, std::vector <double> &concentration, void(*nrfuncv)(int, std::vector <double> &Y, std::vector <double> &F, std::vector <double> &concentration));
void calc(std::vector <double> &x, int *check, std::vector <double> &concentration);
}
void newt::calc(td::vector <double> &x, int *check, std::vector <double> &concentration)
{
(jacobian->*jacobfunc)(x,fvec1,J,concentration, func->*nrfuncv);
}
//Dans le main.cpp
int main()
{
newt nt;
int i=1;
while(mat.produit[i])
{
nt.func = mat.produit[1]->frontiere[1];
nt.funcv=&interface::binaire;
nt.jacobian= mat.produit[1]->frontiere;
nt.jacobfunc = &interface::Jacobian_binaire;
}
}
Les errore:
connot convert void(interface::*)(std::vector <double> &Y, std::vector <double> &F, std::vector <std::vector <double> > &Jacobian2D, std::vector <double> &concentration, void(*nrfuncv)(int, std::vector <double> &Y, std::vector <double> &F, std::vector <double> &concentration)) to
void(interface::*)(std::vector <double> &Y, std::vector <double> &F, std::vector <std::vector <double> > &Jacobian2D, std::vector <double> &concentration, void(interface::*nrfuncv)(int, std::vector <double> &Y, std::vector <double> &F, std::vector <double> &concentration))
J`ai vraimenent besoin d`aide.
//Dans le main.cpp
int main()
{
}