Вот хороший пример: я пытаюсь перегрузить OpenGL glutMouseFunc
, чтобы он мог принять пространство имен и функцию класса по моему выбору. В частности, это Init::DisplayInit::mouse
, который является статическим. Вопрос в том, возможно ли это? Если да, то как это достигается?Могут ли функции принимать статические указатели функций в качестве аргументов?
Моя реализация
void glutMouseFunc(void (Init::DisplayInit::*mouse)(int, int, int, int)) {
(*mouse);
}
Ошибки от реализации
..\OpenGL_03\/displayinit.h:27: error: variable or field 'glutMouseFunc' declared void
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: expected primary-expression before 'int'
..\OpenGL_03\/displayinit.h:27: error: void value not ignored as it ought to be
Примечание, я положил объявление функции в файле заголовка одного и того же файла. Я также убедился, что как декларация , так и определение функции находилось вне объявления пространства имен (которое обертывает большинство из обоих файлов). Как показано, одна из первых ошибок читает функцию как переменную или поле (???).
Имена в вашем сообщении об ошибке не соответствуют фрагменту кода. Показать фактический код. –
Первая ошибка указывает на то, что компилятор думал, что вы указываете бит поле или около того из-за двоеточия; остальные ошибки указывают на то, что компилятор все еще запутался. –