函数指针返回不同的类类型

Function pointers returns different class type

本文关键字:类型 指针 返回 函数      更新时间:2023-10-16

我正试图写一个使用GLEW的小类,我在一堵石墙前,因为我不明白如何绕过编译器给我的问题。

在VS2012 Express中使用此代码

void OpenGlRendering::InitWindow(int argc, char* argv[])
{
    glutInit(&argc, argv);
    glutInitContextVersion(4, 0);
    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
    glutInitContextProfile(GLUT_CORE_PROFILE);
    glutSetOption(
        GLUT_ACTION_ON_WINDOW_CLOSE,
        GLUT_ACTION_GLUTMAINLOOP_RETURNS
    );
    glutInitWindowSize(CurrentWidth, CurrentHeight);
    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
    WindowHandle = glutCreateWindow(WINDOW_TITLE_PREFIX);
    if(WindowHandle < 1) {
        exit(EXIT_FAILURE);
    }
    glutReshapeFunc(OpenGlRendering::ResizeFunction);
    glutDisplayFunc(RenderFunction);
    glutIdleFunc(IdleFunction);
    glutTimerFunc(0, TimerFunction, 0);
    glutCloseFunc(Cleanup);
    glutKeyboardFunc(KeyboardFunction);
}  
void OpenGlRendering::ResizeFunction(int Width, int Height)
{
    CurrentWidth = Width;
    CurrentHeight = Height;
    glViewport(0, 0, CurrentWidth, CurrentHeight);
}
void OpenGlRendering::IdleFunction(void)
{
    glutPostRedisplay();
}

我得到了这个编译错误:

智能感知:类型为"void (OpenGlRendering::*)(int Width,int (*)(int,int)"

在使用一些类来清理代码中的混乱之前,它工作得很好,因为函数驻留在main.cpp中,声明为普通函数

void ResizeFunction(int Width, int Height)
{
    CurrentWidth = Width;
    CurrentHeight = Height;
    glViewport(0, 0, CurrentWidth, CurrentHeight);
}

被这样调用

glutReshapeFunc(OpenGlRendering::ResizeFunction);

当你调用指向非静态成员函数的指针时,它们隐式地需要/提供一个隐藏的参数(指向类实例的this -指针)。由于这个隐藏的参数,您不能混合使用静态函数和非静态成员函数。这就是你想要做的。

void (OpenGlRendering::*)(int Width, int Height)

是非静态成员函数,与静态函数

不兼容。
void (*)(int, int)