2010-09-21 5 views
0

J'essaie de compiler un code d'affectation de pointeurs de fonction.
J'ai essayé différentes variantes d'assignations de pointeurs et __cdecl aussi.
Mais sans succès, après un moment j'ai abandonné ... peut-être que vous verrez quelque chose que je ne peux pas.erreur de pointeur de fonction C2373: redéfinition; différents types de modificateurs

Je compilez avec express visuel 2008, avec des drapeaux:

/Gd __cdecl convention d'appel

/O2 maximiser la vitesse

/compiler TC tous les fichiers comme .c

header:

#ifdef __cplusplus 
    extern "C" { 
#endif 

int __cdecl _intFunc(void); // tried without __cdelc as well 
int (*_get_TYPE_MODE)(void) = NULL; 
... 
... 
#ifdef __cplusplus 
    } 
#endif 

src:

int __cdecl _intFunc(void){return 0;}; // tried without __cdelc as well 
_get_TYPE_MODE = _intFunc; // tried &_intFunc as well. 

Ce produire des erreurs suivantes:

src \ s.c. (61): erreur C2373: '_get_TYPE_MODE': redéfinition; différents modificateurs de type

src \ hh (94): voir la déclaration de '_get_TYPE_MODE' src \ sc (61): C4047 Attention: 'initialisation': 'int' diffère du niveau d'indirection dans « int (__cdecl *) (void) »

EDIT:
Quand je change l'option du compilateur de/Gd à/Gz (fonctions comme __stdcall) pas de problème dans mon code se posent, mais dans d'autres endroits du code ne compilera pas.

Répondre

0

Ne pas mettre le code dans les fichiers d'en-tête

tête:

int (*_get_TYPE_MODE)(void); 
/* without the initialization (initialization is code) 
int (*_get_TYPE_MODE)(void) = NULL; */ 
+0

Cela ne change rien ... et je ne comprends pas ce que fait le « style » a la question;) – bua

+0

Apparemment, vous avez un compilateur impitoyable (je ne sais pas visual-studio-2008). Essayez d'ajouter 'extern' à la déclaration du pointeur de fonction dans le fichier d'en-tête (et gardez le' = NULL' là-bas) – pmg

+0

Finalement, j'ai résolu cela avec: typedef int (* _int_Function) (void); _int_Fonction iF = _intFuct; Mais chaque pointeur de fonction s'est déplacé vers la structure. bonne nouvelle, extern travaillé aussi bien. Je ne voulais pas l'utiliser avant, mais je ne me souviens pas pourquoi ... hé, comment «citer» alias. dim le texte dans les commentaires? – bua