Pointeur static sur fonction :)

Résolu
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 - 29 déc. 2004 à 22:48
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005 - 30 déc. 2004 à 20:42
Certain reconnaitront surement le tutoriel en question. J'ai rajouté quelques trucs au gestionnaire d'exception, mais je bloque sur le point suivant:
Je n'arrive pas à initialiser un pointeur static, voila la class :

class CException : public std::exception
{
private:
static void (*reaction)(CException&); // le pointeur sur la fonction qui prend en paramètre une référence de CException.

public:
static void set_reaction(void (*fn)(CException&)) { reaction = fn; }
// la fonction pour changer ce pointeur
...

};

void CException::reaction = NULL; // et mon essai d'initialisation

Or le compileur refuse de compiler :)

J'ai essayer ca:
void CException::reaction(CException&) = NULL;

En fait, malgré les livres que j'ai sur les membres static et les sites internet, le pointeur de fonction ne pose pas de problème, mais le tout mélangé...

Merci d'avance pour ceux qui pourront m'aider :)

26 réponses

plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
29 déc. 2004 à 23:53
"Or le compileur refuse de compiler :)"
Ca ne m'étonne pas :)

void (*CException::reaction)(CException&) = 0; // pas NULL en C++
3
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
30 déc. 2004 à 00:04
Ca aide pas mal de coder avec un bon bouquin de C/C++ a coté de soit.
N'hésites pas non plus a avoir un regard critique sur ton travail.
Exemple :

static void (*reaction)(CException&);
...
void CException::reaction = NULL;

Tu déclares un pointeur sur une fonction mais pourtant il ne figure nul part dans son affectation, d'ou la réponse de plus_plus_fab:

void (*CException::reaction)(CException&) = 0;

Essaye de rester logique et de ne pas faire semblant de comprendre ce que tu écris, ca t'éviteras beaucoup de soucis.

Shell
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
30 déc. 2004 à 01:37
Bon c'est vrai que je patoge dans la semoule avec leur gestionnaire, j'ai pas l'habitude. De plus, le pointeur de fonction n'est pas du tout intuitif :) Donc c'est vrai, c'est pas logique ce que j'ai écris, mais c'est mieux que rien dans le sens ou, j'espère toujours que les messages d'erreurs m'aideront.

Tient d'ailleurs je suis le seul, ou les messages d'erreur de DevC++ sont vraiment "nul" ? (4.9.8.0)

Et merci encore, ca marche impec.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 déc. 2004 à 01:52
plus_plus_fab> Pas NULL en C++
Tu veux dire que NULL n'est pas cencé être défini quand on compile en C++?
Visual C++ le définit pourtant...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
30 déc. 2004 à 11:21
Ca pose un problème d'utiliser NULL ?
Moi je trouve ca beaucoup plus clair lorsqu'il s'agit d'initialiser des pointeurs.
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
30 déc. 2004 à 15:39
si on fait int *p;
p = 0;

il n'y aura pas un warning du compilateur a propos du type ? (c'est pourquoi NULL est mieux cas il caste le 0 en (void*)0 et de plus je suis du meme avis : c'est beaucoups plus lisible).

Un deniere remarque, le C++ etant par definition compatible avec le C (oui car il est plus plus !), NULL existe aussi et marche tout autant.

Pourquoi faire simple quand on peut faire compliquer ?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 déc. 2004 à 17:19
"Pourquoi faire simple quand on peut faire compliquer ?"

S'il s'agit d'une signature, autant corriger la faute de conjugaison
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
30 déc. 2004 à 17:33
Merci de me le faire remarquer.

Pourquoi faire simple quand on peut faire compliqué ?
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
30 déc. 2004 à 18:38
en C++ le type de 0 est déterminé par le contexte. S'il s'agit d'un pointeur, cela indique qu'il ne pointe pas sur un objet. Cela est du au typage plus fort en C++ qu'en C.
En tout cas, Stroustrup le conseille.
en C, on utilise NULL.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 déc. 2004 à 18:49
Sous Visual C++:
#define NULL 0
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
30 déc. 2004 à 19:05
Dans stdio.h

/* Define NULL pointer value */

#ifndef NULL
#ifdef __cplusplus
#define NULL 0
#else
#define NULL ((void *)0)
#endif
#endif

Donc tout depend si on fait ou nom du c ou C++

Pourquoi faire simple quand on peut faire compliqué ?
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
30 déc. 2004 à 19:20
NULL est donc définie correctement, mais il ne faut pas oublier que les implémentations des librairies standard C et C++ varient selon les compilateurs.
Pas la peine de se voiler la face, s'il faut mettre 0, on met 0. ça evite d'avoir à vérifier que NULL est définie correctement ...
0
cs_JCDjcd Messages postés 1138 Date d'inscription mardi 10 juin 2003 Statut Membre Dernière intervention 25 janvier 2009 4
30 déc. 2004 à 19:31
Mais justement c'est la tout le magie de la chose, il faut mettre NULL comme cela ca marhce dans tout les cas puisqu'il fait du C++, c'est donc defini comme 0, donc tout va pour le mieux dans le meilleurs des monde possible !

Pourquoi faire simple quand on peut faire compliqué ?
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
30 déc. 2004 à 19:39
Vecchio56> Tu parles francais comme une vache espagnoles (:
Il n'y avait pas de faute dans la signature de JCDjcd.
Règle simple : quand un verbe précéder un verbe a l'infinitif, il sera lui meme à l'infinitif!

JCDjcd> Tu peux écouter vecchio pour ses conseils en programmation, mais en francais prend plutot un dico.

Shell
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
30 déc. 2004 à 19:40
je me cite :
"mais il ne faut pas oublier que les implémentations des librairies standard C et C++ varient selon les compilateurs."

"il faut mettre NULL comme cela ca marche dans tout les cas"
pas forcément donc.
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
30 déc. 2004 à 19:45
Hum...
Si c'est standard, rien ne varient!

Shell
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
30 déc. 2004 à 19:46
je suis de l'avis de vecchio pour l'orthographe :)
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
30 déc. 2004 à 19:56
LoOl,
Simple, il n'y a qu'à remplacer "compliquer" par un verbe du 3ième groupe et voir ce que ca donne ...

Avec "Vendre":

Quand on peut faire vendu ????
Je crois pas que ca se dise ca :/

Ca serait plutot :
Quand on peut faire vendre.

Quand je parlais de dico, je ne parlais pas de celui des mots tordus (:

Shell
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
30 déc. 2004 à 19:56
Oui, je suis aussi assez sur de moi, compliqué est ici un adjectif
0
plus_plus_fab Messages postés 232 Date d'inscription vendredi 9 janvier 2004 Statut Membre Dernière intervention 8 janvier 2005
30 déc. 2004 à 19:58
DeAtHCrAsH> et si, les "compilateurs" ont la liberté d'implémenter certaines parties des librairies standard comme bon leur semble. Le standard évolue, tout n'est pas parfait, et on va pas attendre 50 ans pour fixer un standard que personne n'utiliserai alors puisque tout le monde serait habitué à faire autrement.
0
Rejoignez-nous