2016-10-16 6 views
1

Hei,Проблемы с GLUT функции обратного вызова

Я пытаюсь создать сцену с OpenGL и CUDA с помощью C++, но я получаю ошибку, когда я пытаюсь передать функции для инициализации. Вот мой заголовок:

class SimpleScene 
{ 
public: 

    SimpleScene(); 
    ~SimpleScene(); 
    void computeFPS(); 
    void render(); 
    void display(); 
    void idle(); 
    void keyboard(unsigned char key, int x, int y); 
    void reshape(int x, int y); 
    void cleanup(); 
    void initGLBuffers(); 
    uchar *loadRawFile(const char *filename, size_t size); 
    void initGL(int *argc, char **argv); 
    int chooseCudaDevice(int argc, char **argv, bool bUseOpenGL); 
    void runAutoTest(const char *ref_file, char *exec_path); 
    void loadVolumeData(char *exec_path); 
}; 

И в моем файле .cpp у меня есть что-то вроде этого, и это generete же ошибки:

void SimpleScene::initGL(int * argc, char ** argv) 
{ 
SimpleScene* obj = new SimpleScene; 
// initialize GLUT callback functions 
glutInit(argc, argv); 
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); 
glutInitWindowSize(width, height); 
glutCreateWindow("CUDA 3D texture"); 
glutDisplayFunc(obj->display); 
glutKeyboardFunc(obj->keyboard); 
glutReshapeFunc(obj->reshape); 
glutIdleFunc(obj->idle); 

if (!isGLVersionSupported(2, 0) || !areGLExtensionsSupported("GL_ARB_pixel_buffer_object")) 
    { 
    fprintf(stderr, "Required OpenGL extensions are missing."); 
    exit(EXIT_FAILURE); 
    } 
} 

Проблемы на дисплее, в режиме ожидания, и перекроить же раскладке. Ошибки сообщили, как это:

Error C3867 'SimpleScene::display': non-standard syntax; use '&' to create a pointer to member 
Error C3867 'SimpleScene::idle': non-standard syntax; use '&' to create a pointer to member  
Error C3867 'SimpleScene::keyboard': non-standard syntax; use '&' to create a pointer to member 
Error C3867 'SimpleScene::reshape': non-standard syntax; use '&' to create a pointer to member 
+0

HTTPS : //msdn.microsoft.com/en-us/library/b0x1aatf.aspx – rasjani

ответ

1

Из опыта я могу сказать вам, перенасыщение работает очень плохо с ООП архитектуры есть ответ на другой вопрос, который может помочь о гр указателей ++ это ссылка на него How to make a pointer to a method in class.

0

Вы должны запрограммировать так:

  • glutDisplayFunc (this-> дисплей)

вместо

  • glutDisplayFunc (obj-> дисплей)