Ошибка при отправке функции в качестве аргумента, иногда - PullRequest
2 голосов
/ 06 мая 2019

Ошибка 'GLHandler::handleKeys': non-standard syntax; use '&' to create a pointer to member четыре раза для разных функций.

Я пытаюсь создать класс-оболочку для инициализации переизбытка, чтобы сделать вещи чище.

Ошибка появляется на 4все строки по одной и той же причине, хотя я не уверен почему.

Все они устанавливают обратные вызовы

Внутри функции initGlut:

glutKeyboardFunc(this->handleKeys); 
glutDisplayFunc(this->render);
glutTimerFunc(1000 / SCREEN_FPS, this->runMainLoop, 0);

Внутри runMainLoop функция

glutTimerFunc(1000 / this->SCREEN_FPS, this->runMainLoop, val);

Ошибки, возникающие здесь не существуют при одинаковом вызове изнутри main, что приводит меня к мысли, что с классом что-то не так, но яне вижу этого.

1 Ответ

2 голосов
/ 06 мая 2019

this->handleKeys, this->render и this->runMainLoop являются методами класса, а не функциями. Обратный вызов должен быть функцией или статическим методом.

например. См. glutDisplayFunc (а также см. freeglut Интерфейс прикладного программирования ):

glutDisplayFunc устанавливает отображение обратного вызова для текущего окна.

Использование

void glutDisplayFunc(void (*func)(void));

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

Если есть класс

class Foo
{
public:
    void render(void);
};

Тогда указатель на метод render можно получить по &Foo::render. Но тип указателя void(Foo::*)(void), а не void(*)(void)

...