C ++类。代码不会工作

时间:2017-05-12 17:50:55

标签: c++

我正在尝试编写自己的游戏,面对有趣的问题

班级巡洋舰有什么问题?它为什么不起作用? 请帮帮我 我真的读了很多这个

P.s:由于59,60,69,70等而无法编译 有错误:在“。”之前的预期primary-expression令牌

P.s:我用Google搜索了大约2天

#include <SDL.h>
#include <SDL_draw.h>
#include <SDL_ttf.h>
#include <cstdlib>
#include <time.h>
#include <SDL_image.h>

using namespace std;
class cruiser;

class level
{

    public:
    level(SDL_Surface *battleground)
    {
        screen = battleground;
        SDL_Surface *background = SDL_LoadBMP("textures/phone.bmp");
        SDL_BlitSurface(background,NULL,screen,NULL);
        SDL_Flip(screen);
        cruiser cruiser(SDL_Surface *screen);
        //SDL_Delay(4000);
    }
    private:
        SDL_Surface *screen;

    friend cruiser;
};
int main(int argc, char *argv[])
{
    SDL_Surface *screen;
    if(SDL_Init(SDL_INIT_EVERYTHING)) //проверка на ошибку вывода SDL_init
    {
        fprintf(stderr,"Ошибка SDL: %s\n",SDL_GetError());
        return 1;
    }

    atexit(SDL_Quit);                  //выход после успешного включения SDL_init
    screen = SDL_SetVideoMode(1024,768,32,SDL_ANYFORMAT); //пока юзается ток разрешения формата 4:3, мб исправлю чё, но вроде норм
    if(!screen)
    {
        fprintf(stderr,"Unable to set 1024x768 video: %s\n",SDL_GetError());
        return 1;
    }
   // SDL_Quit();
    level level(screen);
    return 0;
}
class cruiser
{
    public:
    cruiser(SDL_Surface *screen)
    {
        SDL_Surface *battleship = IMG_Load("textures/battleship.png");
        SDL_Rect dstrect;
        SDL_Event event;
        dstrect.x = 1024/2;
        dstrect.y = 768/2;
        SDL_BlitSurface(battleship,NULL,level.screen,&dstrect);
        SDL_Flip(level.screen);
        while(1)
        {
            if(SDL_PollEvent(&event))
            {
                if(event.key.keysym.sym==SDLK_LEFT&&dstrect.x>70)
                {
                    dstrect.x-=5;
                    battleship = IMG_Load("textures/battleship.png");
                    SDL_BlitSurface(battleship,NULL,level.screen,&dstrect);
                    SDL_Flip(level.screen);
                    event.key.keysym.sym==NULL;
                }
                if(event.key.keysym.sym==SDLK_RIGHT&&dstrect.x<(1024-200))
                {
                    dstrect.x+=5;
                    battleship = IMG_Load("textures/battleship.png");
                    SDL_BlitSurface(battleship,NULL,level.screen,&dstrect);
                    SDL_Flip(level.screen);
                    event.key.keysym.sym==NULL;
                }
                if(event.key.keysym.sym==SDLK_ESCAPE)
                {
                    exit(0);
                }
                SDL_Delay(100);
                battleship = IMG_Load("textures/battleship.png");
                SDL_BlitSurface(battleship,NULL,level.screen,&dstrect);
                SDL_Flip(level.screen);
            }
        }
   }
//private:
//friend
};

1 个答案:

答案 0 :(得分:0)

在班级的构造函数中

cruiser(SDL_Surface *screen)

您没有传递class level的对象,并且在您尝试访问该类的非静态成员变量的构造函数中。 class cruiser的构造函数应将class level的对象作为输入参数。

应该是

cruiser(SDL_Surface *screen, level obj_level)
{
//your stuff
}

class level的构造函数应该是

level(SDL_Surface *battleground)
{
  //your stuff
  cruiser cruiser(SDL_Surface *screen, *this);
}

希望这有帮助。

P.S:您的代码中存在各种设计缺陷,我不会在这里解决这些问题。

相关问题