C++类。代码不起作用

C++类。代码不起作用,c++,C++,我正试图写我自己的游戏,面临着一个有趣的问题 高级巡洋舰怎么了?为什么它不起作用? 请帮帮我 我真的读了很多这方面的书 注:由于59、60、69、70等原因,无法编译。 错误:之前应为主表达式。代币 我在谷歌上搜索了大约两天 #include <SDL.h> #include <SDL_draw.h> #include <SDL_ttf.h> #include <cstdlib> #include <time.h> #include &

我正试图写我自己的游戏,面临着一个有趣的问题

高级巡洋舰怎么了?为什么它不起作用? 请帮帮我 我真的读了很多这方面的书

注:由于59、60、69、70等原因,无法编译。 错误:之前应为主表达式。代币

我在谷歌上搜索了大约两天

#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
};

在类的构造函数中

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

应该是

cruiser(SDL_Surface *screen, level obj_level)
{
//your stuff
}
level(SDL_Surface *battleground)
{
  //your stuff
  cruiser cruiser(SDL_Surface *screen, *this);
}
类级别的构造函数应为

cruiser(SDL_Surface *screen, level obj_level)
{
//your stuff
}
level(SDL_Surface *battleground)
{
  //your stuff
  cruiser cruiser(SDL_Surface *screen, *this);
}
希望这有帮助


注意:您的代码中有各种各样的设计缺陷,我这里不讨论这些问题。

cruiser cruiserSDL_Surface*screen;-这是怎么回事?所有这些只是声明一个函数,而不是调用一个函数。@PaulMcKenzie我想把这一切都放在一起,它必须显示背景+可以移动的战舰user@Abbishek标高地面*战场{///你的东西巡洋舰巡洋舰地面*屏幕,*这个;}这是什么意思?@Мааааа这是一个指向您所在对象的指针。@Abbishek是*级别吗?@Мааа是*这个。