저는 GLEW를 사용하는 작은 클래스를 작성하려고하는데 저는 컴파일러가 제공하는 문제를 우회하는 방법을 이해할 수 없기 때문에 돌 벽 앞에 있습니다. 가 있기 때문에 잘 vorking 된 코드의 혼란을 정리하기 위해 몇 가지 클래스를 사용하기 전에함수 포인터가 다른 클래스 유형을 반환합니다.
IntelliSense: argument of type "void (OpenGlRendering::*)(int Width, int Height)" is incompatible with the parameter type "void (*)(int, int)"
:
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();
}
내가있어이 컴파일러 오류를 VS2012 Express를 내부에이 코드를 사용하여 함수는 일반 함수로 선언 된 main.cpp에 있습니다.
void ResizeFunction(int Width, int Height)
{
CurrentWidth = Width;
CurrentHeight = Height;
glViewport(0, 0, CurrentWidth, CurrentHeight);
}
및 wa 당신은 그들이 절대적으로 필요 비 정적 멤버 함수에 대한 포인터를 호출 할 때이
glutReshapeFunc(OpenGlRendering::ResizeFunction);
일부 바인딩 메서드를 사용하지 않고 비 멤버 함수 포인터를 필요로하는 것으로 멤버 함수 포인터를 인수로 전달할 수 없습니다. – GreenCoder
http://www.parashift.com/c++-faq-lite/fnptr-vs-memfnptr-types.html –
이전 주석에 추가하면 멤버 함수를 정적으로 만들 수 있습니다 (이 클래스를 유틸리티 라이브러리로 사용하려는 경우 @ThomasFenzl의 링크에 설명 된대로 특정 인스턴스에 대한 호출을 캡슐화 할 래퍼 함수를 만들 수 있습니다. – AFischbein