2013-07-19 88 views
1

從main.cpp中的我的代碼片段的SDL C++類功能錯誤

playerEntity::handle() 
{ 
    if(event.type == SDL_KEYDOWN) 
    { 
      switch(event.key.keysym.sym) 
      { 
        case SDLK_q: 
          running = false; 
          paused = true; 
          break; 
        case SDLK_ESCAPE: 
          paused = !paused; 
          break; 
      } 
    } 

    if(keystate[SDLK_UP]) 
    { 
      if(isJumping == false && isFreeFalling == false) 
      { 
        isJumping = true; 
      } 
    } 
    if(keystate[SDLK_LEFT]) player.hitbox.x--; 
    if(keystate[SDLK_RIGHT]) player.hitbox.x++; 
    if(player.hitbox.x < 0) {player.hitbox.x = 0;} 
    else if(player.hitbox.x > screen.WIDTH - player.hitbox.w) {player.hitbox.x = screen.WIDTH - player.hitbox.w;} 
    if(player.hitbox.y < 0) {player.hitbox.y = 0;} 
    else if(player.hitbox.y > screen.HEIGHT - player.hitbox.h) {player.hitbox.y = screen.HEIGHT - player.hitbox.h;} 
} 

playerEntity在頭文件中被定義:

#ifndef PLAYERENTITY_H 
#define PLAYERENTITY_H 

class playerEntity 
{ 
    private: 
      int jumpHeight; 
      int jump; 
      bool isJumping; 
      bool isFalling; 
      bool isFreeFalling; 
      SDL_Event event; 
      Uint8 *keystate; 
    public: 
      playerEntity(); 
      void jump(); 
      void handle(); 
      void fall(); 
      int health; 
      int damage; 
      SDL_Rect hitbox; 
      bool evolved; 
}; 

#endif 

當我嘗試編譯我得到的錯誤: ISO C++禁止聲明沒有類型的'句柄'[-fpermissive] 'int playerEntity :: handle()'的原型不匹配'playerEntity'中的任何類型 error:candidate is:void playerEntity :: handle )。 我對頭文件和類還不熟悉,我該如何解決這些錯誤?

回答

0

你應該

void playerEntity::handle() 
0

void playerEntity::handle() 

C++需要的返回類型(在這種情況下是無類型void)是在提及取代

playerEntity::handle() 

函數的定義—一個重要的類型安全措施。

順便說一下,您應該將playerEntity::handle()的定義從main.cpp移至新文件playerEntity.cpp。其他文件也是可能的,但很少有好的程序員會在main.cpp中留下這個定義。不幸的是—還好,實際上幸運的是—這會讓你經歷幾個小時的急需學習痛苦單獨編譯和鏈接。

祝你好運。