2017-05-12 2 views
-3

J'essaye d'écrire mon propre jeu, et ai fait face au problème intéressantClasses C++. Le code ne fonctionnera pas

Quel est le problème avec le croiseur de classe? pourquoi ça ne marchera pas? Aidez-moi s'il vous plaît je lis vraiment beaucoup sur ce

P.s: il est ne compile pas en raison de 59, 60, 69, 70, etc. avec l'erreur: attendu expression primaire avant "" jeton

Ps: i googlé environ 2 jours

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

'cruiser cruiser (SDL_Surface * écran);' - Qu'est-ce que c'est censé faire? Tout cela est de déclarer une fonction - il n'appelle pas de fonction. – PaulMcKenzie

+0

@PaulMcKenzie Je veux que ce travail tout toghether doit montrer fond + navire de guerre qui peut être déplacé par l'utilisateur –

Répondre

0

dans le constructeur de votre classe

cruiser(SDL_Surface *screen) 

vous n'êtes pas faire passer un objet de class level et à l'intérieur du constructeur que vous essayez d'accéder à un variable de membre non statique de cette classe. Votre constructeur pour class cruiser devrait prendre l'objet de class level comme paramètre d'entrée.

Il devrait être

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

constructeur de class level doit être

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

Hope this helps.

P.S: Il y a différents défauts de conception dans votre code et je ne les adresse pas ici.

+0

@Abbishek « niveau (SDL_Surface * champ de bataille) {// vos trucs cruiser cruiser (* SDL_Surface écran, * cette } " qu'est-ce que cela signifie? –

+0

@ Матвей 'this' est un pointeur pointant vers l'objet dans lequel vous vous trouvez. – Abhishek

+0

@Abbishek est-ce" * niveau "? –