예를 들면 이런 오류가 있다고 가정한다.

error C2664: 'glutDisplayFunc' : cannot convert parameter 1 from 'void' to 'void (__cdecl *)(void)' Error: "void (CGLMenuService::*) (int entryID)" 형식의 인수가 "void (__cdecl *)(int)" 형식의 매개 변수와 호환되지 않습니다.

사실 MFC 상의 OpenGL에서 glutCreateMenu를 사용하는데 콜백 함수를 이용해야 했다.

GLint mainMenuID = glutCreateMenu(Menu_hMain);

위의 저 Menu_hMain 은

void Menu_hMain(int entryID);

이런 형태로 헤더에서 선언하였는데 함수의 포인터형이 맞지 않아서 오류가 생겼었다.

멤버 함수는 type 형태 자체가 다르기 때문에 나타나는 문제였기에 앞에 static으로 선언하거나 전역변수로 선언하니 해결되었다.

static void Menu_hMain(int entryID);

 

※참고 : http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=950497&ref=950494

'옛날 작업 > MFC' 카테고리의 다른 글

[MFC] 컨트롤을 윈도우 스타일에 맞게 변경하기  (0) 2016.03.27