Bonjour,
j'ai un petit souci (car suis pas bon en c++) et je suis certain de trouver ici la réponse !
voila j'ai une class :
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
 
class Find_Root
{
    public:
        Find_Root();
        virtual ~Find_Root();
        double Root(double (*Fx)(double), double Xi, double Xf, double Precision, int MaxIter);
};
 
double Find_Root::Root(double (*Fx)(double), double Xi, double Xf, double Precision, int MaxIter)
{  
double solution;
// trouve la solution
return solution;
}
et dans mon main une fonction f :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
#include "Find_Root.h"
double f(double X) return X*X+2;
 
int main()
{
    Find_Root R;
   cout<<R.Root(f,0,5,1e-6,1000);
}
cela me donne bien racine 2... 1.414... pas de pb la fonction f est bien transmise à Find_Root.
Le problème arrive lorsque la fonction f est définie dans une autre class et pas défini en global comme avant... J'ai donc une class nomée Fct :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
class Fct
{
  public:
        Fct();
        virtual ~Fct();   
        double f(double X) return X*X+2;
  protected:
}
et dans mon main je fais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
int main()
{
Fct Func;
Find_Root R;  
cout<<R.Root(Func.f,0,5,1e-6,1000);
}
ET là c'est le drame ... il reconnait pas le type de f lorsque je passe Func.f : <unresolved overloaded function type> ??? et
Impossible de compiler
||=== Build: Debug in Raccord (compiler: GNU GCC Compiler) ===|
C:\Users\jpc\Desktop\Raccord\main.cpp||In function 'int main()'|
C:\Users\jpc\Desktop\Raccord\main.cpp|44|error: no matching function for call to 'Find_Root::Root(<unresolved overloaded function type>, int, int, double, int)'|
C:\Users\jpc\Desktop\Raccord\Find_Root.h|18|note: candidate: double Find_Root::Root(double (*)(double), double, double, double, int)|
C:\Users\jpc\Desktop\Raccord\Find_Root.h|18|note: no known conversion for argument 1 from '<unresolved overloaded function type>' to 'double (*)(double)'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

J'aimerais pouvoir passer à R.Root n'importe quelle fonction f qu'elle soit définie comme au début ... "double f(double X) return X*X+2;" ou dans une class quelconque pourvue qu'elle soit de type double f(double) ...

pourquoi ça ne marche pas car dans les deux cas le type de la fonction f est le même double f(double) pourtant !!?
et comment y remédier ??

Merci d'avance pour vos réponses,
cordialement
JPC