2013-09-06 11 views
0

Я использую GLUT с C++, и я вызываю функцию с именем glutDisplayFunc с единственным аргументом типа void (*)(void). По какой-то причине, когда я использую следующий метод C++ от одного из моих классов:C++: невозможно инициализировать параметр типа 'void (*)()' с rvalue типа 'void'

void EventHandler::Render(void) { ... } 

Он бросает эту ошибку:

cannot initialize a parameter of type 'void (*)()' with an rvalue of type 'void' 

Который, кажется, дает мне мысль, что метод мой C++ не является заявлено, что оно должным образом соответствует аргументу типа void (*)(void). Что я могу сделать, чтобы мой метод работал с этим параметром функции?

+0

Arrrrrrgghhhhhhh !!!! Является ли использование поисковой системы sooo трудно? Этот вопрос уже задан под тегом OpenGL только вчера. http://stackoverflow.com/q/18652267/524368, а затем несколько раз до этого, например, http://stackoverflow.com/q/3589422/524368 – datenwolf

ответ

5

Метод C++ не является нормальной функцией. Он не будет преобразован в обычный указатель функции. Вы не показали свой реальный код, но я предполагаю, что вы сделали что-то вроде:

glutDisplayFunc(EventHandler::Render) 

Вам нужно сделать Render метод static, если вы хотите использовать его таким образом. В противном случае объявите свободную функцию и используйте ее.

+0

Тогда все в порядке: http://stackoverflow.com/ questions/5500057/how-to-define-a-function-pointer-pointing-to-a-static-member-function –

+0

Объявлен как 'static', и он отлично работает, спасибо! – beakr

+0

К сожалению, использование static invkoes undefined, зависящее от компилятора. См. Мой ответ в той же самой теме, заданной только вчера: http://stackoverflow.com/a/18656082/524368 – datenwolf

Смежные вопросы