2016-03-26 7 views
0

Ich mache ein einfaches Pong-Spiel mit einer API namens Freeglut, zusammen mit den Anweisungen unter http://noobtuts.com/cpp/2d-pong-game. In der API enthalten sind zwei Funktionen, die einen Zeiger auf einen Callback aufrufen, der void zurückgibt, das ich unterhalb der Hauptfunktion definiert habe. Zur Kompilierzeit erhalte ich jedoch die Fehlermeldung C2065, dass das angegebene Callback-Argument ein nicht deklarierter Bezeichner ist.Compilieren mit Callback Function Pointers in Visual C++

Hier sind die Definitionen der Funktionen von IntelliSense, wenn ich den Mauszeiger darüber bewege.

void__stdcall glutDisplayFunc (void (* Rückruf)())

void__stdcall glutTimerFunc (unsigned int Zeit, void (* Rückruf) (int), int value)

Hier ist mein Code:

#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(); 
} 

Ich habe versucht, die Rückrufe innerhalb der Hauptfunktion setzen, aber ich denke nicht, dass dies korrekt ist und es immer noch nicht kompiliert.

Antwort

0

Sie müssen Ihre Callback-Funktionen deklarieren, bevor Sie sie verwenden. Der Compiler liest den Quellcode vom Anfang bis zum Ende ein. Wenn die Callback-Funktionen in Ihrer _tmain-Funktion referenziert werden, wurden sie noch nicht gesehen.

erklären Explizit

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

vor Ihrer _tmain Funktion.

+0

ja, das stimmt. Ich erinnere mich sogar daran, das in der C++ - Klasse gelernt zu haben, als wir grundlegende Prozeduren gemacht haben. Seitdem bin ich zu OOP übergegangen, also habe ich diesen Leckerbissen vergessen –