ошибка указателей функций C2373: переопределение;модификаторы другого типа - PullRequest
0 голосов
/ 21 сентября 2010

Я пытаюсь скомпилировать код назначения некоторых указателей функций.
Я пробовал разные варианты назначений указателей и __cdecl.
Но безуспешно, через некоторое время я сдался ... может быть, выувидеть то, что я не могу.

Я компилирую с Visual Express 2008, с флагами:

/ Gd __cdecl соглашение о вызовах

/ O2 максимизировать скорость

/ TC компилировать всефайлы в формате .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.

Это приводит к следующим ошибкам:

src\ sc (61): ошибка C2373: '_get_TYPE_MODE': переопределение;модификаторы различных типов

src \ hh (94): см. объявление '_get_TYPE_MODE' src \ sc (61): предупреждение C4047: 'initializing': 'int' отличается по уровням косвенности от 'int (__cdecl *)) (void) '

РЕДАКТИРОВАТЬ:
Когда я меняю опцию компилятора с / Gd на / Gz (функционирует как __stdcall), в моем коде не возникает никаких проблем, но вкод других мест не будет компилироваться.

1 Ответ

0 голосов
/ 21 сентября 2010

Не помещайте код в заголовочные файлы

header:

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