2014-11-06 41 views
-2

我已经在每一个线程在这个问题上,我仍然无法修复这个错误 这是GameManager.h错误c3867 ++不能弄明白

void myReshape(GLsizei w, GLsizei h); 
void myDisplay(void); 
void myBoardKeys(unsigned char key, int x, int y); 
void timer(int millisec); 
void speedtime(int speed); 
void FPS(void); 
void myIdle(); 
void mySpecialKeys(int key, int x, int y); 

这是GameManager.cpp 我有所有的功能上述声明如下

void GameManager::myBoardKeys(unsigned char key, int x, int y){....} 
void GameManager::timer(int millisec){....} 

这是我的主要功能

GameManager* _game = new GameManager(); 
// ---------------------------------------------------------- 
// main() function 
// ---------------------------------------------------------- 
void main(int argc, char **argv) { 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); 
    glutInitWindowSize(INIT_WINDOW_W, INIT_WINDOW_H); 
    glutInitWindowPosition(-1, -1); 
    glutCreateWindow("The Frogger"); 
    glutIdleFunc(_game->myIdle);//C3867 
    glutDisplayFunc(_game->myDisplay);//C3867 
    glutReshapeFunc(_game->GameManager::myReshape);//C3867 
    glutSpecialFunc(_game->mySpecialKeys);//C3867 
    glutKeyboardFunc(_game->myBoardKeys);//C3867 
    _game->timer(rand() % 1000);//C3867 
    glutTimerFunc(10000, _game->speedtime, 10000);//C3867 
    glutMainLoop(); 
} 

我试着这样称呼它

&GameManager::myIdle 
&_game->myIdle 

它仍然给了我同样的错误,我不明白为什么。

希望你们能帮助我这个

由于提前

+0

那些免费的功能?如果是这样,你为什么试图通过_game指针喂食它们? – 2014-11-06 09:52:05

+0

你说错了。你应该把它叫做_game-> myIdle(),因为你的myIdle是一个函数。你的'_game'是一个指向具有成员函数'myIdle()'的对象的指针。另外,我假设你的'myIdle'是一个公共函数或保护函数 - 不是私有的(然后无意义地调用)。 – ha9u63ar 2014-11-06 09:52:13

+0

它们都是公共函数,_game-> myIdle()也不起作用,它返回类型为“void”的参数与类型为“void(__cdecl *)()”的参数不兼容。“我忘记提及所有这些函数都是假设的要回调,如果我把他们都放在我的主要文件他们的工作,但老师要他们出主,他不知道如何解决这个大声笑 – 2014-11-06 09:54:31

回答

0

我想通了家伙谢谢! 这是解决方案,这是GameManager.h

static float R, W, H; 
int timespeed = 35; 
static GLint gFramesPerSecond; 

static void myReshape(GLsizei w, GLsizei h); 
static void myDisplay(void); 
static void myBoardKeys(unsigned char key, int x, int y); 
static void timer(int millisec); 
static void speedtime(int speed); 
static void FPS(void); 
static void myIdle(); 
static void mySpecialKeys(int key, int x, int y); 

这是GameManager.cpp

float GameManager::R, GameManager::H, GameManager::W; 
GLint GameManager::gFramesPerSecond; 
Jogo* GameManager::_jogo = new Jogo(); 
void GameManager::myReshape(GLsizei w, GLsizei h){...} 
Rest of functions here.... 

,这是我的主要

void main(int argc, char **argv) { 
    glutInit(&argc, argv); 
    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH); 
    glutInitWindowSize(INIT_WINDOW_W, INIT_WINDOW_H); 
    glutInitWindowPosition(-1, -1); 
    glutCreateWindow("The Frogger"); 
    glutIdleFunc(GameManager::myIdle); 
    glutDisplayFunc(GameManager::myDisplay); 
    glutReshapeFunc(GameManager::myReshape); 
    glutSpecialFunc(GameManager::mySpecialKeys); 
    glutKeyboardFunc(GameManager::myBoardKeys); 
    GameManager::timer(rand() % 1000); 
    glutTimerFunc(10000, GameManager::speedtime, 10000); 
    glutMainLoop(); 
} 

我不得不做出的一切静态,它现在可以工作

谢谢!