Я пытаюсь передать функцию обратного вызова из 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