• Классы C++. Почему программа не выполняет второй класс?

    troublemvker
    @troublemvker Автор вопроса
    yeswell:
    #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_obj(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, level);
            //SDL_Delay(4000);
        }
        private:
            SDL_Surface *screen;
       // friend cruiser;
       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(screen);
        return 0;
    }
    class cruiser
    {
        public:
        cruiser_obj(SDL_Surface *screen, level obj_level)
        {
            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
    };
    <\code>
  • Классы C++. Почему программа не выполняет второй класс?

    troublemvker
    @troublemvker Автор вопроса
    yeswell: я не понимаю)) вот код который проблемный с ошибками и вот выписка из build messages (я работаю в код блоке)c45c0d6be0e044bc9c75e1444d89a27b.png
  • Классы C++. Почему программа не выполняет второй класс?

    troublemvker
    @troublemvker Автор вопроса
    yeswell: во втором коде ошибок нет, игра просто мертва

    ошибки в первом коде:
    ||=== Build: Debug in Game (compiler: GNU GCC Compiler) ===|
    Battleship Cruiser\Chaze.cpp||In member function 'int level::level_obj(SDL_Surface*)':|
    Battleship Cruiser\Chaze.cpp|23|warning: no return statement in function returning non-void [-Wreturn-type]|
    Battleship Cruiser\Chaze.cpp||In function 'int SDL_main(int, char**)':|
    Battleship Cruiser\Chaze.cpp|46|error: conflicting declaration 'level screen'|
    Battleship Cruiser\Chaze.cpp|31|note: previous declaration as 'SDL_Surface* screen'|
    Battleship Cruiser\Chaze.cpp||In member function 'int cruiser::cruiser_obj(SDL_Surface*, level)':|
    Battleship Cruiser\Chaze.cpp|59|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|60|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|69|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|70|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|71|warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]|
    Battleship Cruiser\Chaze.cpp|71|warning: statement has no effect [-Wunused-value]|
    Battleship Cruiser\Chaze.cpp|77|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|78|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|79|warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]|
    Battleship Cruiser\Chaze.cpp|79|warning: statement has no effect [-Wunused-value]|
    Battleship Cruiser\Chaze.cpp|87|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|88|error: expected primary-expression before '.' token|
    ||=== Build failed: 9 error(s), 5 warning(s) (0 minute(s), 0 second(s)) ===|
  • Классы C++. Почему программа не выполняет второй класс?

    troublemvker
    @troublemvker Автор вопроса
    yeswell: ну я изменил всё то, что вы описали в предыдущем комментарии по поводу вызова конструктора и создания объектов
  • Классы C++. Почему программа не выполняет второй класс?

    troublemvker
    @troublemvker Автор вопроса
    yeswell: у меня есть еще один вариант того же кода, но я не думаю что в нём Вы сможете разобраться)
  • Классы C++. Почему программа не выполняет второй класс?

    troublemvker
    @troublemvker Автор вопроса
    так или иначе это не решает проблему(
    я новичок и много не знаю в синтаксисе
    неужели такая тяжёлая задача? уже сколько человек спросил..
    по сути я просто неправильно вызываю функцию и неправильно передаю в неё значение.. я это и сам понимаю, а как сделать я не знаю
  • Классы C++. Почему программа не выполняет второй класс?

    troublemvker
    @troublemvker Автор вопроса
    не компилится так как вы сказали
    вылетает ошибка
    ||=== Build: Debug in Game (compiler: GNU GCC Compiler) ===|
    Battleship Cruiser\Chaze.cpp|26|error: field 'cruiser' has incomplete type 'cruiser'|
    Battleship Cruiser\Chaze.cpp||In constructor 'cruiser::cruiser(SDL_Surface*)':|
    Battleship Cruiser\Chaze.cpp|58|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|59|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|68|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|69|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|70|warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]|
    Battleship Cruiser\Chaze.cpp|70|warning: statement has no effect [-Wunused-value]|
    Battleship Cruiser\Chaze.cpp|76|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|77|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|78|warning: converting to non-pointer type 'int' from NULL [-Wconversion-null]|
    Battleship Cruiser\Chaze.cpp|78|warning: statement has no effect [-Wunused-value]|
    Battleship Cruiser\Chaze.cpp|86|error: expected primary-expression before '.' token|
    Battleship Cruiser\Chaze.cpp|87|error: expected primary-expression before '.' token|
    ||=== Build failed: 9 error(s), 4 warning(s) (0 minute(s), 0 second(s)) ===|
  • Классы C++. Почему программа не выполняет второй класс?

    troublemvker
    @troublemvker Автор вопроса
    сделал как вы сказали, программа запускается и так же вылетает не заходя в класс cruiser