2011-05-14 4 views
6

Je veux avoir une classe qui a en tant que membre d'un pointeur vers une fonctionC++ pointeur membre de la classe à la fonction globale

est ici le pointeur de fonction:

typedef double (*Function)(double); 

est une fonction ici qui correspond à la définition de pointeur de fonction:

double f1(double x) 
{ 
    return 0; 
} 

ici est la définion de classe:

class IntegrFunction 
{ 
public: 
    Function* function; 
}; 

et quelque part dans la fonction principale que je veux faire quelque chose comme ceci:

IntegrFunction func1; 
func1.function = f1; 

Mais, ce code ne fonctionne pas.

Est-il possible d'affecter à un membre de classe un pointeur de fonction à une fonction globale, déclarée comme ci-dessus? Ou dois-je changer quelque chose dans la définition du pointeur de fonction?

Merci,

+0

En quoi cela ne fonctionne-t-il pas? –

+0

Comment ça "ne marche pas"? Avez-vous une erreur de compilation? Si oui, qu'est-ce que c'est? –

+0

La réponse pourrait être plus facile pour nous de trouver si vous fournissez un exemple complet. Vous êtes * si * proche, il ne faudrait que quelques lignes de plus pour le compléter. Aussi, pouvez-vous nous dire ce que vous entendez par "ne fonctionne pas?" Avez-vous une erreur du compilateur? Linker? Avez-vous un comportement d'exécution différent de ce que vous attendez? –

Répondre

9

Remplacer ceci:

class IntegrFunction 
{ 
public: 
    Function* function; 
}; 

avec ceci:

class IntegrFunction 
{ 
public: 
    Function function; 
}; 

Votre typedef crée déjà un pointeur à la fonction. La déclaration Function* function crée un pointeur vers une fonction.

+0

+1 très belle prise. –

+0

Merci, j'ai compris mon erreur et mon code fonctionne maintenant. Je devrais être plus prudent la prochaine fois. –

-3

Vous devez utiliser l'adresse de l'opérateur pour obtenir un pointeur de fonction dans la norme C++ 03.

func1.function = &f1; 
+2

Non, vous ne le faites pas.Le '&' est nécessaire pour prendre l'adresse d'une fonction membre mais pas pour une fonction non membre. –

4

Il suffit de remplacer

Function* function; 

à

Function function; 
2

Vous déclarez la variable comme Function* function, mais le Function typedef est déjà un typedef pour un pointeur. Donc, le type du pointeur de fonction est juste Function (sans le *).

0

Remplacer

typedef double (*Function)(double); 

par

typedef double Function(double); 

à typedef la fonction de type. Vous pouvez ensuite écrire le * lorsque vous l'utilisez.

Questions connexes