繁体   English   中英

在Visual C ++中使用回调函数指针进行编译

[英]Compiling with Callback Function Pointers in Visual C++

我正在按照http://noobtuts.com/cpp/2d-pong-game提供的说明,使用名为freeglut的API制作一个简单的乒乓游戏。 API中包含两个函数,这些函数需要一个指向返回void的回调的指针,而我已在main函数下定义了该回调。 但是,在编译时,我收到错误消息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();
}

我尝试将回调函数放在main函数中,但是我认为这是不正确的,并且仍然无法编译。

您需要在使用回调函数之前声明它们。 编译器从头到尾读取源代码。 _tmain函数中引用回调函数时,尚未看到它们。

明确声明

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

在您的_tmain函数之前。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM