2014-11-06 59 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(); 
} 

我不得不做出的一切靜態,它現在可以工作

謝謝!