http://noobtuts.com/cpp/2d-pong-game adresindeki yönergeleri içeren freeglut adlı bir API ile basit bir pong oyunu yapıyorum. API'da, ana işlevi aşağıda tanımladığım, void döndüren bir geri bildirime işaret eden iki işlev vardır. Ancak derleme zamanında, sağlanan geri arama argümanı beyan edilmeyen bir tanımlayıcı olduğunu belirten C2065 hata mesajını alıyorum.Visual C++ ile Geri Çağırma İşlev İşaretçileri ile Derleme
Ben bunların üzerine geldiğimde intellisense tarafından sağlanan işlevlerin tanımları.
void__stdcall glutDisplayFunc (void (* callback)())
glutTimerFunc (işaretsiz int zaman, void (* callback) (int), int değeri) void__stdcallİşte
benim kodudur:#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();
}
Geri aramaları ana işleve dahil etmeyi denedim, ancak bunun doğru olduğunu düşünmüyorum ve yine de derleme yapmıyor.
Evet, doğru. Temel prosedürleri yaparken C++ sınıfında öğrenmeyi bile hatırlıyorum. O zamandan beri oop'a geçtim, o yüzden bu tür popuayı unutmuşum –