Pointeur static sur fonction :) [Résolu]

luhtor 2023 Messages postés mardi 24 septembre 2002Date d'inscription 28 juillet 2008 Dernière intervention - 29 déc. 2004 à 22:48 - Dernière réponse : plus_plus_fab 232 Messages postés vendredi 9 janvier 2004Date d'inscription 8 janvier 2005 Dernière intervention
- 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 

26 réponses

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

void (*CException::reaction)(CException&) = 0; // pas NULL en C++
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de plus_plus_fab
DeAtHCrAsH 2674 Messages postés vendredi 25 janvier 2002Date d'inscription 6 février 2013 Dernière intervention - 30 déc. 2004 à 00:04
0
Utile
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
luhtor 2023 Messages postés mardi 24 septembre 2002Date d'inscription 28 juillet 2008 Dernière intervention - 30 déc. 2004 à 01:37
0
Utile
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
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 30 déc. 2004 à 01:52
0
Utile
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
luhtor 2023 Messages postés mardi 24 septembre 2002Date d'inscription 28 juillet 2008 Dernière intervention - 30 déc. 2004 à 11:21
0
Utile
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
cs_JCDjcd 1138 Messages postés mardi 10 juin 2003Date d'inscription 25 janvier 2009 Dernière intervention - 30 déc. 2004 à 15:39
0
Utile
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
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 30 déc. 2004 à 17:19
0
Utile
"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
cs_JCDjcd 1138 Messages postés mardi 10 juin 2003Date d'inscription 25 janvier 2009 Dernière intervention - 30 déc. 2004 à 17:33
0
Utile
Merci de me le faire remarquer.

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

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

pointeur static sur fonction :) - page 2