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 :
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
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; }
cela me donne bien racine 2... 1.414... pas de pb la fonction f est bien transmise à Find_Root.
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); }
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 :
et dans mon main je fais :
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 là c'est le drame ... il reconnait pas le type de f lorsque je passe Func.f : <unresolved overloaded function type> ??? et
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); }
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
Partager