6
votes

Indéfinis Référence à la fonction statique Membre du pointeur de C ++, qu'est-ce que je fais mal?

Veuillez considérer ces fichiers:

pH: xxx

p.cpp: xxx

Main.Cpp : xxx

Lors de la compilation, je reçois ceci: xxx

mais: xxx

Compile Droite.

Qu'est-ce qui ne va pas avec le code? Je ne trouve tout simplement pas où le problème est, s'il vous plaît, votre aide sera plus que appréciée.

Merci.


1 commentaires

Vous pouvez envisager d'utiliser boost.function .


4 Réponses :


13
votes

Votre tentative de définition p :: sf code> est incorrecte - votre est une définition d'une variable globale nommée sf code> de type int (p :: *) () code>, c'est-à-dire un pointeur à une fonction membre. Par conséquent, p :: sf code> reste indéfini, d'où l'erreur de liaison.

Essayez ceci à la place: P>

int (*p::sf)() = 0;

// or,

typedef int (*p_sf_t)();
p_sf_t p::sf = 0;


1 commentaires

Wow, merci beaucoup pour cette explication! Maintenant, je comprends mieux comment fonctionne l'opérateur "::".



4
votes

La différence est que l'erreur ne se produit que lorsque vous liez réellement le programme. Le problème est dans votre déclaration du pointeur de la fonction statique. La syntaxe correcte est la suivante: xxx


0 commentaires

3
votes

Vous définissez un pointeur de fonction de membre et non un pointeur de fonction. Je ne sais pas quelle est la syntaxe correcte, mais j'aurais essayé quelque chose comme ceci: xxx


0 commentaires

1
votes

Je ne donnerai pas une autre réponse (la réponse de Jedjarn est correcte) mais je vais vous suggérer une autre façon d'atteindre la même initialisation sans initialisation statique (et la charge qu'elle implique) xxx

de cette manière Vous déléguez l'initialisation statique à une variable de fonction statique, qui ne dispose pas des problèmes d'ordre d'initialisation qui affectent les variables de données statiques et est ininitialisée paresseux


0 commentaires