Veuillez considérer ces fichiers:
pH: p> p.cpp: p> Main.Cpp : p> Lors de la compilation, je reçois ceci: p> mais: p> Compile Droite. P> 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. P> Merci. P> P>
4 Réponses :
Votre tentative de définition Essayez ceci à la place: P> 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.
int (*p::sf)() = 0;
// or,
typedef int (*p_sf_t)();
p_sf_t p::sf = 0;
Wow, merci beaucoup pour cette explication! Maintenant, je comprends mieux comment fonctionne l'opérateur "::".
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:
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:
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) 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 p> p>
Vous pouvez envisager d'utiliser boost.function .