在 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 函数之前。