Pointeur static sur fonction :) [Résolu]

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
- - Dernière réponse : plus_plus_fab
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
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 :)
Afficher la suite 

Votre réponse

20/26 réponses

Meilleure réponse
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Dernière intervention
8 janvier 2005
3
Merci
"Or le compileur refuse de compiler :)"
Ca ne m'étonne pas :)

void (*CException::reaction)(CException&) = 0; // pas NULL en C++

Merci plus_plus_fab 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de plus_plus_fab
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
0
Merci
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
Commenter la réponse de DeAtHCrAsH
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
0
Merci
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.
Commenter la réponse de luhtor
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
0
Merci
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...
Commenter la réponse de vecchio56
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Dernière intervention
28 juillet 2008
0
Merci
Ca pose un problème d'utiliser NULL ?
Moi je trouve ca beaucoup plus clair lorsqu'il s'agit d'initialiser des pointeurs.
Commenter la réponse de luhtor
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Dernière intervention
25 janvier 2009
0
Merci
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 ?
Commenter la réponse de cs_JCDjcd
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
0
Merci
"Pourquoi faire simple quand on peut faire compliquer ?"

S'il s'agit d'une signature, autant corriger la faute de conjugaison
Commenter la réponse de vecchio56
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Dernière intervention
25 janvier 2009
0
Merci
Merci de me le faire remarquer.

Pourquoi faire simple quand on peut faire compliqué ?
Commenter la réponse de cs_JCDjcd
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Dernière intervention
8 janvier 2005
0
Merci
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.
Commenter la réponse de plus_plus_fab
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
0
Merci
Sous Visual C++:
#define NULL 0
Commenter la réponse de vecchio56
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Dernière intervention
25 janvier 2009
0
Merci
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é ?
Commenter la réponse de cs_JCDjcd
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Dernière intervention
8 janvier 2005
0
Merci
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 ...
Commenter la réponse de plus_plus_fab
Messages postés
1138
Date d'inscription
mardi 10 juin 2003
Dernière intervention
25 janvier 2009
0
Merci
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é ?
Commenter la réponse de cs_JCDjcd
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
0
Merci
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
Commenter la réponse de DeAtHCrAsH
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Dernière intervention
8 janvier 2005
0
Merci
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.
Commenter la réponse de plus_plus_fab
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
0
Merci
Hum...
Si c'est standard, rien ne varient!

Shell
Commenter la réponse de DeAtHCrAsH
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Dernière intervention
8 janvier 2005
0
Merci
je suis de l'avis de vecchio pour l'orthographe :)
Commenter la réponse de plus_plus_fab
Messages postés
2674
Date d'inscription
vendredi 25 janvier 2002
Dernière intervention
6 février 2013
0
Merci
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
Commenter la réponse de DeAtHCrAsH
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Dernière intervention
22 août 2010
0
Merci
Oui, je suis aussi assez sur de moi, compliqué est ici un adjectif
Commenter la réponse de vecchio56
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Dernière intervention
8 janvier 2005
0
Merci
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.
Commenter la réponse de plus_plus_fab

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.