Итак, я изначально пытаюсь сделать некоторые базовые вещи OpenGL (freeglut) на C++, но я попал в ловушку. Я получаю следующее сообщение об ошибке:Какова должна быть подпись метода для работы с glutDisplayFunc()?
.../TextureMapper.cpp: In member function 'void TextureMapper::run()':
.../TextureMapper.cpp:67:28: error: cannot convert 'TextureMapper::display' from type 'void* (TextureMapper::)()' to type 'void (*)()'
glutDisplayFunc(display);
^
Я думаю, что мне нужно display
быть указатель на функцию (или как там оно называется, я не очень знаком с этим понятием). Однако я делаю это неправильно. Я никогда не использовал указатель функции раньше, и, к сожалению, сообщение об ошибке ничего не значит для меня, и я не могу понять документацию, которую я прочитал. Я программист на Java, поэтому для меня это очень чуждо.
Вот декларация для функции члена в TextureMapper.h
:
void* display(void);
И конкретизация (не помню, как это называется либо) в TextureMapper.cpp
:
void* TextureMapper::display(void)
{
...
}
Я заметил, что CLion предупреждал об этом, но я также пробовал это первым:
void display();
Но это дало аналогичную ошибку.
Вот где я пытаюсь вызвать glutDisplayFunc
:
void TextureMapper::run()
{
/* Run GL */
glutDisplayFunc(display);
glutMainLoop();
}
'TextureMapper' является классом. 'display' и' run' являются функциями-членами внутри. –
Обратите внимание, что 'void display();' имеет правильную подпись. Вам нужна функция без возвращаемого значения (т. Е. Указатель функции void (*)() '), но' void * display(); 'будет возвращать' void * '. – user4407569