Перегрузка функций в OpenGL (cannot convert)

149
18 июля 2019, 08:40

Выпрыгивают ошибки

ошибка: cannot convert 'MainWindow::glfw_onKey' from type 'void (MainWindow::)(GLFWwindow*, int, int, int, int)' to type 'GLFWkeyfun {aka void (*)(GLFWwindow*, int, int, int, int)}'
     glfwSetKeyCallback(gWindow, glfw_onKey);
ошибка: cannot convert 'MainWindow::glfw_onFramebufferSize' from type 'void (MainWindow::)(GLFWwindow*, int, int)' to type 'GLFWframebuffersizefun {aka void (*)(GLFWwindow*, int, int)}'
     glfwSetFramebufferSizeCallback(gWindow, glfw_onFramebufferSize);

Немогу понять почему .

Вот место вызова.

//    GLFWkeyfun glfw_onKey = glfw_onKey();
    // Set the required callback functions
    glfwSetKeyCallback(gWindow, glfw_onKey);
//    GLFWframebuffersizefun glfw_onFramebufferSize = glfw_onFramebufferSize();
    glfwSetFramebufferSizeCallback(gWindow, glfw_onFramebufferSize);

А вто сами функции

void MainWindow::glfw_onFramebufferSize(GLFWwindow* window, int width, int height)
{
    glViewport(0, 0, width, height);
}
void MainWindow::glfw_onKey(GLFWwindow* window, int key, int scancode, int action, int mode)
{
    if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
}

Если вызов тот же самый но без класса

 // Set the required callback functions
glfwSetKeyCallback(gWindow, glfw_onKey);
glfwSetFramebufferSizeCallback(gWindow, glfw_onFramebufferSize);
glClearColor(0.23f, 0.38f, 0.47f, 1.0f);
// Set the required callback functions
glfwSetFramebufferSizeCallback(gWindow, glfw_onFramebufferSize);
void glfw_onFramebufferSize(GLFWwindow* window, int width, int height)
{
    glViewport(0, 0, width, height);
}
void glfw_onKey(GLFWwindow* window, int key, int scancode, int action, int mode)
{
    if(key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
        glfwSetWindowShouldClose(window, GL_TRUE);
}

То всё прекрасно работает. В общем не знаю что не так (по сути даже не знаю как оформить вопрос и его название)

READ ALSO
Как в C++ удалить экземпляр класса?

Как в C++ удалить экземпляр класса?

Создаю указатель на экземпляр класса, вызываю конструктор, переменная "a" содержит число 2Вызываю деструктор (в котором это "a" должно стать...

114
Возможно ли наследование class <---> struct в c++?

Возможно ли наследование class <---> struct в c++?

Насколько я понимаю, они оба поддерживают наследование, оба могут содержать поля и функции, оба могут содержать конструктор и деструктор,...

145
OverflowError: Python int too large to convert to C long

OverflowError: Python int too large to convert to C long

Когда пытаюсь выполнить скрипт bimbampy выходит эта ошибка:

137
OpenMP как оптимальней декларировать цикл

OpenMP как оптимальней декларировать цикл

Как более правильно описать цикл примерно для следующей схемы кода:

146