2016-03-26 55 views
0

http://noobtuts.com/cpp/2d-pong-game adresindeki yönergeleri içeren freeglut adlı bir API ile basit bir pong oyunu yapıyorum. API'da, ana işlevi aşağıda tanımladığım, void döndüren bir geri bildirime işaret eden iki işlev vardır. Ancak derleme zamanında, sağlanan geri arama argümanı beyan edilmeyen bir tanımlayıcı olduğunu belirten C2065 hata mesajını alıyorum.Visual C++ ile Geri Çağırma İşlev İşaretçileri ile Derleme

Ben bunların üzerine geldiğimde intellisense tarafından sağlanan işlevlerin tanımları.

void__stdcall glutDisplayFunc (void (* callback)())

glutTimerFunc (işaretsiz int zaman, void (* callback) (int), int değeri) void__stdcall

İşte

benim kodudur:

#include "stdafx.h" 
#include "freeglut.h" 

#include <string> 
#include <windows.h> 
#include <iostream> 
#include <conio.h> 
#include <sstream> 
#include <math.h> 
#include <gl\GL.h> 
#include <gl\GLU.h> 

#pragma comment (lib, "OpenGL32.lib") 

//window size and update rate (60 fps) 
int width = 500; 
int height = 200; 
int interval = 1000/60; 

int _tmain(int argc, char** argv) 
{ 
    //initialize openg 1 (via glut) 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); 
    glutInitWindowSize(width, height); 
    glutCreateWindow("jackfrye.com Pong"); 

    //Register callback functions 
    glutDisplayFunc(draw); 
    glutTimerFunc(interval, update, 0); 

    glutMainLoop(); 
    return 0; 
} 

void draw() { 
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
    glLoadIdentity(); 

    //TODO: draw scene 

    //swap buffers (has to be done at the end); 
    glutSwapBuffers(); 
} 

void update(int value) { 
    //Call update() again in 'interval' milliseconds 
    glutTimerFunc(interval, update, 0); 

    //Redisplay frame 
    glutPostRedisplay(); 
} 

Geri aramaları ana işleve dahil etmeyi denedim, ancak bunun doğru olduğunu düşünmüyorum ve yine de derleme yapmıyor.

cevap

0

Geri arama işlevlerinizi kullanmadan önce bildirmeniz gerekir. Derleyici, kaynak kodunu baştan sona okur. Geri arama işlevleri, _tmain işlevinizde başvuruda bulunduğunda, henüz görülmemiştir.

Açıkça senin _tmain işlevi önce

void draw(); 
void update(int value); 

ilan ediyoruz.

+0

Evet, doğru. Temel prosedürleri yaparken C++ sınıfında öğrenmeyi bile hatırlıyorum. O zamandan beri oop'a geçtim, o yüzden bu tür popuayı unutmuşum –

İlgili konular