在 Visual C++ 中使用回调函数指针进行编译
Compiling with Callback Function Pointers in Visual C++
我正在按照 http://noobtuts.com/cpp/2d-pong-game 提供的说明,使用名为 freeglut 的 API 制作一个简单的乒乓球游戏。 API 中包含两个函数,它们调用指向 returns void 回调的指针,我在主函数下方定义了回调。但是,在编译时,我收到错误消息 C2065,指出提供的回调参数是未声明的标识符。
这是我将鼠标悬停在智能感知上时所提供的功能的定义。
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();
}
我试过将回调放在主函数中,但我认为这是不正确的,它仍然无法编译。
您需要先声明您的回调函数,然后再使用它们。编译器从头到尾读取源代码。当回调函数在你的 _tmain
函数中被引用时,它们还没有被看到。
明确声明
void draw();
void update(int value);
在 _tmain
函数之前。
我正在按照 http://noobtuts.com/cpp/2d-pong-game 提供的说明,使用名为 freeglut 的 API 制作一个简单的乒乓球游戏。 API 中包含两个函数,它们调用指向 returns void 回调的指针,我在主函数下方定义了回调。但是,在编译时,我收到错误消息 C2065,指出提供的回调参数是未声明的标识符。
这是我将鼠标悬停在智能感知上时所提供的功能的定义。
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();
}
我试过将回调放在主函数中,但我认为这是不正确的,它仍然无法编译。
您需要先声明您的回调函数,然后再使用它们。编译器从头到尾读取源代码。当回调函数在你的 _tmain
函数中被引用时,它们还没有被看到。
明确声明
void draw();
void update(int value);
在 _tmain
函数之前。