C++Talk.NET Forum Index C++Talk.NET
C++ language newsgroups
 
Archives   FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Problème avec les compositions de fonctions
Goto page 1, 2  Next
 
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French)
View previous topic :: View next topic  
Author Message
Loïc MICHEL
Guest





PostPosted: Mon Sep 22, 2003 10:24 am    Post subject: Problème avec les compositions de fonctions Reply with quote



Bonjour à tous,

Je travaille avec kdevelop 3.1.0 sous Mandrake linux 9.1. J'essaie
d'utiliser des fonctions dans d'autres fonctions, par exemple :

double fe (double x);
double f (double x, double fe, double a){
return fe(a)-a; }

Ceci etant un fichier externe déclaré dans main.cpp

Le compilateur me retourne : "fe cannot be used as a fonction"

La littérature consacrée au language ne précise pas comment effectuer ces
compositions. Que faire ?

Par avance, merci.

L.M.






Back to top
Richard Delorme
Guest





PostPosted: Mon Sep 22, 2003 11:31 am    Post subject: Re: Problème avec les compositions de fonctions Reply with quote



Loïc MICHEL a écrit :

Quote:
Bonjour à tous,

Je travaille avec kdevelop 3.1.0 sous Mandrake linux 9.1. J'essaie
d'utiliser des fonctions dans d'autres fonctions, par exemple :

double fe (double x);
^^
double f (double x, double fe, double a){
^^<- problème
return fe(a)-a; }

Ceci etant un fichier externe déclaré dans main.cpp

Le compilateur me retourne : "fe cannot be used as a fonction"

Un des paramètres de la fonction s'appelle aussi fe et il cache la fonction
de même nom. A priori, tu veux juste :

double fe(double x);
double f(double a) {
return fe(a) - a;
}


--
Richard

Back to top
Jerome Fuselier
Guest





PostPosted: Mon Sep 22, 2003 12:01 pm    Post subject: Re: Problème avec les compositions de fonctions Reply with quote




Quote:
Bonjour à tous,


Bonjour


Quote:

Je travaille avec kdevelop 3.1.0 sous Mandrake linux 9.1. J'essaie
d'utiliser des fonctions dans d'autres fonctions, par exemple :

double fe (double x);

^^

double f (double x, double fe, double a){

^^<- problème

return fe(a)-a; }

Ceci etant un fichier externe déclaré dans main.cpp

Le compilateur me retourne : "fe cannot be used as a fonction"


Un des paramètres de la fonction s'appelle aussi fe et il cache la fonction
de même nom. A priori, tu veux juste :

double fe(double x);
double f(double a) {
return fe(a) - a;
}




Je pense qu'il cherche plutôt à passer une fonction comme paramêtre. La syntaxe est un peu compliquée

pour pouvoir l'expliquer dans un message, je vous indique donc une adresse qui explique clairement comment faire.


http://www.ann.jussieu.fr/courscpp/Sections/Sect05-H0.html


Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Mon Sep 22, 2003 2:30 pm    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

"Loïc MICHEL" <loic.michel54 (AT) wanadoo (DOT) fr> wrote


Quote:
Je travaille avec kdevelop 3.1.0 sous Mandrake linux 9.1. J'essaie
d'utiliser des fonctions dans d'autres fonctions, par exemple :

double fe (double x);
double f (double x, double fe, double a){
return fe(a)-a; }

Ceci etant un fichier externe déclaré dans main.cpp

Le compilateur me retourne : "fe cannot be used as a fonction"

Ce n'est pas trop clair ce que tu cherches à faire, mais dans ta
fonction f, fe est un paramètre de type double, et non une fonction.

Si le but est d'appeler la fonction fe, il suffit de changer le nom du
paramètre, afin que la fonction reste visible.

Si le but est d'appeler une fonction passée comme paramètre, il faut
déclarer que le paramètre est un pointeur à une fonction, et non un
double :

double
f( double x, double (*fe)( double ), double a )
{
return (*fe)(a) - a ;
}

En C++, en revanche, il est bien plus fréquent d'utiliser un objet
fonctionnel, soit au moyen d'un template, soit en tant que classe de
base abstraite.

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Tue Sep 23, 2003 11:42 am    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

Jerome Fuselier <jerome.fuselier (AT) xrce (DOT) xerox.com> wrote


Quote:
Je pense qu'il cherche plutôt à passer une fonction comme paramêtre.
La syntaxe est un peu compliquée pour pouvoir l'expliquer dans un
message,

Tu rigoles ?

La syntaxe en soi n'a rien de compliqué. Ce qui rend parfois les choses
compliquées, c'est l'utilisation de la syntaxe en contexte -- une
syntaxe simple, embriquée dans une autre syntaxe simple, embriquées ...
finit par être compliqué. Déclarer un pointeur à une fonction qui
renvoie un pointeur à une fonction, par exemple...

C'est là, évidemment, que les typedef vient au secours :

typedef double (*PtrAMaFnc)( double ) ;

double
f( double a, PtrAMaFnc fnc )
{
return (*fnc)( a ) ;
}

Mais peut-être tu voulais dire qu'en général, les priorités des nombreux
opérateurs C++ n'est pas facile à tenir en tête. Là, j'avoue être
d'accord. Alors, dans la doute, je mets des parenthèses. (En
l'occurance, ils sont nécessaires ci-dessus. Mais j'en mets parfois sans
savoir s'ils sont nécessaires ou non.)

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Back to top
kanze@gabi-soft.fr
Guest





PostPosted: Tue Sep 23, 2003 11:53 am    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

Jerome Fuselier <jerome.fuselier (AT) xrce (DOT) xerox.com> wrote


Quote:
Je travaille avec kdevelop 3.1.0 sous Mandrake linux 9.1. J'essaie
d'utiliser des fonctions dans d'autres fonctions, par exemple :

double fe (double x);
^^

double f (double x, double fe, double a){
^^<- problème

return fe(a)-a; }

Ceci etant un fichier externe déclaré dans main.cpp

Le compilateur me retourne : "fe cannot be used as a fonction"

Un des paramètres de la fonction s'appelle aussi fe et il cache la
fonction de même nom. A priori, tu veux juste :

double fe(double x);
double f(double a) {
return fe(a) - a;
}

Je pense qu'il cherche plutôt à passer une fonction comme paramêtre.

P'êt' ben qu'oui, P'êt' ben que non.

Le problème, c'est qu'il n'a pas bien expliqué le problème. Alors, je
rappelle le propos de Dijkstra : « Besides a mathematical inclination,
an exceptionally good mastery of one's native tongue is the most vital
asset of a competent programmer ». Avant de maîtriser le C++, il faut
maîtriser le français (ou l'anglais, ou ...). Si on ne sait pas formuler
le problème d'une façon précise, on ne saurait jamais le résoudre. (Et
je ne vise pas le posteur initial uniquement. C'est malheureusement un
problème général.)

--
James Kanze GABI Software mailto:kanze (AT) gabi-soft (DOT) fr
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Back to top
Gabriel Dos Reis
Guest





PostPosted: Tue Sep 23, 2003 12:04 pm    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

[email]kanze (AT) gabi-soft (DOT) fr[/email] writes:

Quote:
typedef double (*PtrAMaFnc)( double ) ;

double
f( double a, PtrAMaFnc fnc )
{
return (*fnc)( a ) ;
}

Mais peut-être tu voulais dire qu'en général, les priorités des nombreux
opérateurs C++ n'est pas facile à tenir en tête. Là, j'avoue être
d'accord. Alors, dans la doute, je mets des parenthèses. (En
l'occurance, ils sont nécessaires ci-dessus. Mais j'en mets parfois sans
savoir s'ils sont nécessaires ou non.)

En l'occurence, elles ne sont pas nécessaires

return fnc(a);

-- Gaby


Back to top
Christophe Lephay
Guest





PostPosted: Tue Sep 23, 2003 12:37 pm    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

<kanze (AT) gabi-soft (DOT) fr> a écrit dans le message de
news:d6652001.0309230353.6376fb81 (AT) posting (DOT) google.com...
Quote:
Le problème, c'est qu'il n'a pas bien expliqué le problème. Alors, je
rappelle le propos de Dijkstra : « Besides a mathematical inclination,
an exceptionally good mastery of one's native tongue is the most vital
asset of a competent programmer ». Avant de maîtriser le C++, il faut
maîtriser le français (ou l'anglais, ou ...). Si on ne sait pas formuler
le problème d'une façon précise, on ne saurait jamais le résoudre.

Pourtant, la connaissance d'une ou plusieurs solutions est souvent un
préalable à la bonne formulation du problème. C'est la définition d'un
problème pervers : un problème qu'on ne peut formuler qu'une fois l'avoir
résolu.

L'incapacité à exprimer correctement un problème n'est pas toujours liée à
des lacunes linguistiques, hélas...

Chris



Back to top
Gabriel Dos Reis
Guest





PostPosted: Tue Sep 23, 2003 7:47 pm    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:

Quote:
On 23 Sep 2003 14:04:57 +0200, Gabriel Dos Reis
[email]dosreis (AT) cmla (DOT) ens-cachan.fr[/email]> wrote:

En l'occurence, elles ne sont pas nécessaires

return fnc(a);

D'ailleurs je trouve le terme "pointeur de/sur une fonction" plutôt
mal choisi, puisqu'un pointeur de fonction n'est pas vraiment un
pointeur (pas convertible en void*)

je ne comprends pas cette partie de l'argumentation. Que penses-tu
que pointeur veut dire, en C++ ?

Quote:
et ne s'utilise pas comme un
pointeur (pas besoin de l'opérateur "*")...

Ça, c'est une invention du comité en ANSI C ; une invention que le
Père a refusé de suivre en ce qui concerne les pointeurs sur membre.

-- Gaby


Back to top
Loïc Joly
Guest





PostPosted: Tue Sep 23, 2003 8:22 pm    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

Fabien LE LEZ wrote:

Quote:
D'ailleurs je trouve le terme "pointeur de/sur une fonction" plutôt
mal choisi, puisqu'un pointeur de fonction n'est pas vraiment un
pointeur (pas convertible en void*)

std::cout peut se convertir en void*, donc std::cout est un pointeur !

--
Loïc



Back to top
Loïc Joly
Guest





PostPosted: Tue Sep 23, 2003 8:24 pm    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

Gabriel Dos Reis wrote:

Quote:
Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:
| et ne s'utilise pas comme un
| pointeur (pas besoin de l'opérateur "*")...

Ça, c'est une invention du comité en ANSI C ; une invention que le
Père a refusé de suivre en ce qui concerne les pointeurs sur membre.


Ce qui a pour effet d'introduire une brisure de symétrie. Y avait-il un
autre intérêt qu'une histoire de goût à faire ce choix ?

--
Loïc


Back to top
Gabriel Dos Reis
Guest





PostPosted: Tue Sep 23, 2003 8:38 pm    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

Loïc Joly <loic.actarus.joly (AT) wanadoo (DOT) fr> writes:

Quote:
Gabriel Dos Reis wrote:

Fabien LE LEZ <gramster (AT) gramster (DOT) com> writes:
| et ne s'utilise pas comme un
| pointeur (pas besoin de l'opérateur "*")...

Ça, c'est une invention du comité en ANSI C ; une invention que le
Père a refusé de suivre en ce qui concerne les pointeurs sur membre.


Ce qui a pour effet d'introduire une brisure de symétrie.

S'il y a brisure de symétrie, je ne suis pas certain qu'il soit du
côté de C++ (à part retenir la règle de ANSI C pour compatibilité).
C++ de ce point de vue là (i.e. pointer sur membre) est 100% cohérent
avec C classique et le principe général que si on a un pointeur alors
appliquer * permet d'accéder à la valeur pointée.

Quote:
Y avait-il un
autre intérêt qu'une histoire de goût à faire ce choix ?

Voir ci-dessus.

-- Gaby

Back to top
Gabriel Dos Reis
Guest





PostPosted: Tue Sep 23, 2003 9:59 pm    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

"Alain Naigeon" <anaigeon (AT) free (DOT) fr> writes:

Quote:
"Loïc Joly" <loic.actarus.joly (AT) wanadoo (DOT) fr> a écrit dans le message news:
bkqa1r$vrn$1 (AT) news-reader4 (DOT) wanadoo.fr...
Fabien LE LEZ wrote:

D'ailleurs je trouve le terme "pointeur de/sur une fonction" plutôt
mal choisi, puisqu'un pointeur de fonction n'est pas vraiment un
pointeur (pas convertible en void*)

std::cout peut se convertir en void*, donc std::cout est un pointeur !

Sophisme.

Nullement. Cela amène simplement Fabien à regarder de plus près son
assertion initiale.

-- Gaby

Back to top
Samuel Krempp
Guest





PostPosted: Tue Sep 23, 2003 10:51 pm    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

le Tuesday 23 September 2003 23:59, [email]dosreis (AT) cmla (DOT) ens-cachan.fr[/email] écrivit :

Quote:
"Alain Naigeon" <anaigeon (AT) free (DOT) fr> writes:

| "Loïc Joly" <loic.actarus.joly (AT) wanadoo (DOT) fr> a écrit dans le message news:
| bkqa1r$vrn$1 (AT) news-reader4 (DOT) wanadoo.fr...
| > Fabien LE LEZ wrote:
|
| > > D'ailleurs je trouve le terme "pointeur de/sur une fonction" plutôt
| > > mal choisi, puisqu'un pointeur de fonction n'est pas vraiment un
| > > pointeur (pas convertible en void*)
|
| > std::cout peut se convertir en void*, donc std::cout est un pointeur !
|
| Sophisme.

Nullement. Cela amène simplement Fabien à regarder de plus près son
assertion initiale.

Fabien : pas convertible en void* => pas vraiment en pointeur
Loïc : ah, mais alors, comme cout est convertible en void *,
cout est un pointeur
C'est implicitement un raisonnement pour justifier que Fabien a tort.
Mais comme il fait dire à l'implication de Fabien ce qu'elle ne veut pas
dire, le raisonnement est faux. (indépendamment de la vérité ou non de
l'assertion initiale de Fabien)
Qu'on appelle ça un sophisme ou pas, c'est une question de Français. Pour ma
part avec les définitions de http://zeus.inalf.cnrs.fr/ je ne sais pas.

--
Sam

Back to top
Michel Michaud
Guest





PostPosted: Wed Sep 24, 2003 5:21 am    Post subject: Re: Problème avec les compositions de fonctions Reply with quote

Dans news:flk77zkzp0.fsf (AT) sel (DOT) cmla.ens-cachan.fr, Gabriel Dos
Reis <dosreis (AT) cmla (DOT) ens-cachan.fr> a écrit :
Quote:
S'il y a brisure de symétrie, je ne suis pas certain qu'il soit du
côté de C++ (à part retenir la règle de ANSI C pour compatibilité).
C++ de ce point de vue là (i.e. pointer sur membre) est 100%
cohérent avec C classique et le principe général que si on a un
pointeur alors appliquer * permet d'accéder à la valeur pointée.

Je ne suis pas certain, * n'est pas le seul opérateur de
déréférencement. On peut voir l'appel de fonction comme une sorte
de déréférencement. Comparons :

int a[100];
int *b= a;

int c= b[0];

int d(int e[]) { return e[0]; }
int f(int *g) { return *g; }
d(a); d(b);
f(a); f(b);

Avec

int A(int);
int (*B)(int)= A;

int C= B(0);

int D(int E(int)) { return E(0); }
int F(int (*G)(int)) { return (*G)(0); }
D(A); D(B);
F(A); F(B);

Ça me semble assez cohérent :-)

(Je sais, je n'ai mis que ce qui est cohérent :-)

--
Michel Michaud [email]mm (AT) gdzid (DOT) com[/email]
http://www.gdzid.com
FAQ de fr.comp.lang.c++ :
http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ/


Back to top
Display posts from previous:   
Post new topic   Reply to topic    C++Talk.NET Forum Index -> C++ (French) All times are GMT
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2006 phpBB Group
SEO toolkit © 2004-2006 webmedic.