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()
{
}