pointeur sur function dans le class

pointeur sur function dans le class - C++ - Programmation

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

Reply

Marsh Posté le 27-07-2009 à 13:06:10   

Reply

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.

Reply

Marsh Posté le 27-07-2009 à 13:38:29    

Merci je vais voir

Reply

Marsh Posté le 27-07-2009 à 13:42:36    

Et des petits typedef n'ont jamais tué personne.

Reply

Marsh Posté le 27-07-2009 à 13:44:24    

Code :
  1. 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))
  2. 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))

Reply

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.

Reply

Marsh Posté le 27-07-2009 à 18:01:01    

boost::function quoi v_v

Reply

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"


Message édité par ciaonataha le 28-07-2009 à 10:40:18
Reply

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);

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed