2013-11-03 20 views
0

我需要帮助...绝望。我正在制作游戏,并且我收到编译错误apply_surface was not declared in this scope.错误是在行95,在功能User::show()。我不知道我做错了什么。C++错误,从函数调用类成员

编辑:现在它是fized,图像“阴茎”,没有显示在屏幕上。抱歉编辑。

/*This source code copyrighted by Lazy Foo' Productions (2004-2013) 
and may not be redistributed without written permission.*/ 

//The headers 
#include "SDL/SDL.h" 
#include "SDL/SDL_image.h" 
#include <string> 

SDL_Surface *background = NULL; 
SDL_Surface *screen = NULL; 
SDL_Surface *penis = NULL; 
SDL_Event event; 

void cleanup() 
{ 
    SDL_FreeSurface(background); 
    SDL_FreeSurface(screen); 
    SDL_FreeSurface(penis); 
    SDL_Quit; 
} 

bool quit = false; 

class User 
{ 
private: 
    SDL_Surface *penis = NULL; 
    SDL_Surface *screen = NULL; 
    int x; 
    int y; 
    int xVel; 
    int yVel; 
public: 
    void keys(); 
    void move(); 
    void show(); 
    void user(); 
}; 
void User::keys() 
{ 
    while(quit == false) 
     if(SDL_PollEvent(&event)) 
     { 
      if(event.type == SDL_QUIT) 
       quit = true; 
     } 

    Uint8 *keystates = SDL_GetKeyState(NULL); 


    if(keystates[SDLK_d]) 
    { 
     User::xVel+=50; 
    } 
    if(keystates[SDLK_a]) 
    { 
     User::xVel-=50; 
    } 
    if(keystates[SDLK_s]) 
    { 
     User::yVel+=50; 
    } 
    if(keystates[SDLK_w]) 
    { 
     User::yVel-=50; 
    } 
    if(keystates[SDLK_ESCAPE]) 
    { 
     cleanup(); 
    } 
} 

void User::user() 
{ 
    x = 0; 
    y = 0; 
    xVel = 0; 
    yVel = 0; 
} 

void User::move() 
{ 
    x+=xVel; 
    y+=yVel; 
    x-=xVel; 
} 


void User::show() 
{ 
    apply_surface(x,y,penis,screen); 
    SDL_Flip(screen); 
} 

void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination) 
{ //Temporary rectangle to hold the offsets 

    SDL_Rect offset; 
    //Get the offsets 
    offset.x = x; 
    offset.y = y; //Blit the surface 
    SDL_BlitSurface(source, NULL, destination, &offset); 
} 



int main(int argc, char* argv[]) 
{ 
    SDL_Init(SDL_INIT_EVERYTHING); 
    screen = SDL_SetVideoMode(640,400,32,SDL_SWSURFACE); 
    background = IMG_Load("background.png"); 
    penis = IMG_Load("penis.png"); 
    apply_surface(0,0,background,screen); 

    SDL_Flip(screen); 

    while(quit == false) 
    { 
     User Penis; 
     Penis.user(); 
     Penis.keys(); 
     Penis.move(); 
     Penis.show(); 
     if(quit == true) 
     { 
      cleanup(); 
     }   
    } 
    return 0; 
} 
+3

将'apply_surface()'的定义移到使用它的函数上面。 –

+0

您赢得了StackOverflow:'SDL_Surface * penis = NULL;'。辣椒医生到处去了。 – kfsone

+2

'用户阴茎;''Penis.move();''Penis.show();'看起来像有趣的游戏 –

回答

1

apply_surface()功能未范围内声明

所以,你的代码移到:

void apply_surface(int x, int y, SDL_Surface* source, SDL_Surface* destination) 
{ //Temporary rectangle to hold the offsets 

    SDL_Rect offset; 
    //Get the offsets 
    offset.x = x; 
    offset.y = y; //Blit the surface 
    SDL_BlitSurface(source, NULL, destination, &offset); 
} 

顶端(使用前)

否则

在顶部添加一个函数原型,如下所示:

void apply_surface(int, int, SDL_Surface*, SDL_Surface*); 
+0

如果将参数包含在函数中,这个答案会更好。 – kfsone

+0

这样做是因为你说@kfsone –

+0

另一种选择是,他只是在第一次使用它时添加了一个原型:'apply_surface(x,y,阴茎,屏幕);' – kfsone