我正在使用名为freeglut的API制作简单的乒乓球游戏,并遵循http://noobtuts.com/cpp/2d-pong-game提供的说明。包含在API中的是两个函数,它们调用指向返回void的回调的指针,我在main函数下面定义了它。但是,在编译时,我收到错误消息C2065,指出提供的回调参数是未声明的标识符。
以下是当我将鼠标悬停在intellisense上时由intellisense提供的函数的定义。
void__stdcall glutDisplayFunc(void(* callback)())
void__stdcall glutTimerFunc(unsigned int time,void(* callback)(int),int value)
这是我的代码:
#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();
}
我已经尝试将回调放在main函数中,但我不认为这是正确的,但仍然无法编译。
答案 0 :(得分:0)
在使用它们之前,您需要声明回调函数。编译器从头到尾读取源代码。在_tmain
函数中引用回调函数时,尚未看到它们。
明确声明
void draw();
void update(int value);
在_tmain
功能之前。