ошибка: недопустимое преобразование из void (*) () в void (*) () - что?

Я пытаюсь передать функцию обратного вызова из C ++ в OpenGL (C API):

gluQuadricCallback(qobj, GLU_ERROR, errorCallback);

где errorCallback - это функция в файле, скомпилированном как код C ++ и объявленном как

void errorCallback();

Код компилируется чисто с g ++ 4.4 в Linux, но дает следующую ошибку с mingw32 g ++ 4.4 в Windows:

..\glwidget.cpp:172: error: invalid conversion from 'void (*)()' to 'void (*)()'

..\glwidget.cpp:172: error:   initializing argument 3 of 'void gluQuadricCallback(GLUquadric*, GLenum, void (*)())'

Это какая-то проблема смешивания C и C ++? Как я могу решить эту проблему?

ОБНОВЛЕНИЕ: void GLAPIENTRY errorCallback (); тоже не компилируется : (
.. \ glwidget.cpp: 129: ошибка: ожидаемый инициализатор перед 'errorCallback'
Теперь он почти уверен, что это проблема соглашения о вызовах и не имеет ничего общего со связью C , см. Комментарии под ответом Томаса.

ОБНОВЛЕНИЕ 2: Мне кажется, я просто столкнулся с запутанная проблема OpenGL, касающаяся GLAPIENTRY , APIENTRY и _GLUfuncptr . Вот ОЧЕНЬ ДЛИТЕЛЬНОЕ обсуждение вопросов переносимости:
http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/2007-October/003023.html

6
задан Ali 17 February 2011 в 13:36
поделиться