Bonjour,
Je souhaite définir des fonctions imbriquées en C++ pour éviter la déclaration de variables globales. J'ai trouvé sur un site internet qu'il est possible de faire ceci en passant par une classe (http://www.gotw.ca/gotw/058.htm). Donc j'ai essayé d'adapter le méthode proposée mais j'ai échouer. Serait-il possible de m'aider s'il vous plaît ? L'objectif final est de passer d'une fonction à plusieurs arguments à une fonction de type double (double, double). A l'aide s'il vous plaît.
Voici le code :
Les erreurs que j'obtiens quand je compile sont :Code:#include <cstdlib> #include <iostream> #include <cmath> #include <complex> /* .... */ class Myclass { double (*retval)(double, double); double A; double x0, y0, z0, z, a, b,k; int mu, nu, s, t; double g(double x, double y) { return (x0+y0+z0+a+b+k+s+t+mu+nu)*A*x*y; } public : Myclass(complex<double> A, double x0, double y0, double z0, double k, double a, double b, int mu, int nu, int s, int t) : z(0.) { this->A=A; this->x0=x0; this->y0=y0; this->z0=z0; this->k=k; this->a=a; this->b=b; this->mu=mu; this->nu=nu; this->s=s; this->t=t; retval=g; } operator double (double, double) { return retval; } }; int main () { /* ...... */ return 0; }
g++ -c -g -MMD -MP -MF "build/Debug/GNU-Linux-x86/main.o.d" -o build/Debug/GNU-Linux-x86/main.o main.cpp
main.cpp:114:36: error: ‘Myclass:perator double(double, double)’ must take ‘void’
operator double (double, double)
^
main.cpp: In constructor ‘Myclass::My_class(std::comple x<double>, double, double, double, double, double, double, int, int, int, int)’:
main.cpp:112:15: error: cannot convert ‘Myclass::g’ from type ‘double (champ_speculaire_class:(double, double)’ to type ‘double (*)(double, double)’
retval=g;
^
-----