параметр функции обратного вызова glutKeyboardfunc ()

0

В простой программе opengl у меня есть следующая строка:

glutKeyboardFunc(keypressed);

Проблема заключается в том, что моя "нажатая" функция находится в другом файле cpp, включенном в проект. Как я могу вызвать эту функцию из другого файла?

в main.cpp:

main()
{
  ---
  glutKeyboardFunc(keypressed);
  ---
}

в Motion.cpp:

void keypressed(unsigned char key, int x, int y){...}

Вещи, которые я пытаюсь (все дали ошибку компиляции):

glutKeyboardFunc(keypressed);
glutKeyboardFunc(Motion::keypressed);   
glutKeyboardFunc(&Motion::keypressed);
glutKeyboardFunc(&keypressed);  

Motion mot;
glutKeyboardFunc(mot.keypressed);

Какие-либо предложения? (Я использовал freeglut.dll, если библиотека отвечает за ответ)

Теги:
callback
opengl

1 ответ

1
Лучший ответ

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

void keypressed(unsigned char key, int x, int y);

Обычный способ сделать это состоит в том, чтобы каждый C++ файл, который экспортирует функции, также имеет файл заголовка, который включает прототипы для всех этих функций. Затем, когда вы хотите использовать функцию, определенную внутри этого файла, вы можете включить этот заголовочный файл в верхней части файла, который должен использовать эту функцию.

  • 0
    ошибка LNK2019: неразрешенный внешний символ «void __cdecl, нажатый клавишей (unsigned char, int, int)» (? keypressed @@ YAXEHH @ Z), на который ссылается функция _main (я получаю эту ошибку, когда я добавляю прототип функции в main.cpp)
  • 0
    @Cagkan: Это означает, что каждый из ваших исходных файлов успешно компилируется в объектные файлы, но когда приходит время связать их вместе в исполняемый файл, включается только ваш основной объектный файл. Так как ваш основной объектный файл ссылается на этот другой объектный файл, который не включен, вы получаете неразрешенную ссылочную ошибку. Как это решить, зависит от того, как вы его компилируете.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню