2016-03-26 18 views
0

私はfreeglutというAPIを使って簡単なポンゲームを作っています。これはhttp://noobtuts.com/cpp/2d-pong-gameで提供されている指示に従います。 APIには、main関数の下で定義したvoidを返すコールバックへのポインタを呼び出す2つの関数が含まれています。しかし、コンパイル時には、指定されたコールバック引数が宣言されていない識別子であることを示すエラーメッセージC2065が表示されます。Visual C++のコールバック関数ポインタを使用したコンパイル

intellisenseが私の上に置かれたときに提供される関数の定義を以下に示します。 glutDisplayFunc void__stdcall

はglutTimerFunc void__stdcall(無効(*コールバック)())

(unsigned int型の時間、無効(*コールバック)(int型)、int型の値)

ここに私のコードです:

#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

コールバック関数を使用する前に宣言する必要があります。コンパイラは最初から最後までソースコードを読み込みます。あなたの_tmain関数でコールバック関数が参照されると、まだ表示されていません。

明示的_tmain関数の前に

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

を宣言します。

+0

はい、そうです。私は基本的な手続きをしていたときにC++クラスでそれを学ぶことを覚えています。私はそれ以来、おっとりしていたので、私はちょっと忘れました。 –

関連する問題