LINUX.ORG.RU

[C++][SDL] Глюк с указателем.

 ,


0

0

имеется:

void cGame::mainLoop () {
    bool done = false;
    while (!done) {
        SDL_Event event;
        while (SDL_PollEvent (&event)) {
            switch (event.type) {
                case SDL_QUIT:
                    done = true;
                    break;

                case SDL_KEYDOWN:
                    if (event.key.keysym.sym == SDLK_ESCAPE) {
                        done = true;
                    }
                    break;

                default:
                    break;
            } // end switch (event.type)
        } // end while (SDL_PollEvent (&event))

        SDL_FillRect (gArc::screen, 0, SDL_MapRGB (gArc::screen->format, 255, 255, 255));

        // Здесь gArc::screen != 0

        m_ship->draw ();
      
        // и здесь gArc::screen != 0 тоже

        SDL_Flip (gArc::screen);
    } // end while (!done)
}

где

void cSpaceShip::draw () {
    if (SDL_BlitSurface (m_sprite, &m_srcrect, gArc::screen, &m_dstrect) != 0) {
        std::cerr << "screen: " << gArc::screen << " sprite: " << m_sprite << std::endl;
        //throw gArc::g_exception (SDL_GetError ());
    }
}

Внутри метода draw() gArc::screen аномально равен 0.

namespace gArc {
// Указатель на поверхность экрана.
    static SDL_Surface *screen;
}
Что не так? Почему может быть такая аномалия?

Странно. Попробуй пересобрать проект. :-)

smh ★★★
()

Подозреваю, что вот это

> namespace gArc {

> // Указатель на поверхность экрана.

> static SDL_Surface *screen;

> }


у тебя написано в заголовочном файле, который включается в несколько CPP-файлов. Так? Если да, то проблема в том, что благодаря static у тебя в каждой единице компиляции (CPP-файл) получается своя независимая переменная screen. Засунь переменную в один CPP-файл:

/* CPP */
namespace gArc {
SDL_Surface *screen;
}

/* H */
namespace gArc {
extern SDL_Surface *screen;
}

Deleted
()
Ответ на: комментарий от Deleted

Всё было так ка ты сказал.

Всё работает отныне.

Valdemard
() автор топика
Ответ на: комментарий от Deleted

> у тебя написано в заголовочном файле, который включается в несколько CPP-файлов. Так? Если да, то проблема в том, что благодаря static у тебя в каждой единице компиляции (CPP-файл) получается своя независимая переменная screen.

Век живи, век учись. :-)

smh ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.