Мой код:
window.cpp
Window::Window(int w, int h, const char *title, const char *icon)
{
height = h;
width = w;
if(SDL_Init( SDL_INIT_EVERYTHING ) == 0)
{
SDL_WM_SetCaption(title, NULL);
SDL_WM_SetIcon(SDL_LoadBMP(icon),NULL);
screen = SDL_SetVideoMode(width, height, 32,
SDL_SWSURFACE | SDL_RESIZABLE | SDL_DOUBLEBUF);
if(screen == NULL)
{
running = false;
return;
}
fullscreen = false;
}
else
running = false;
return;
}
Window::Window()
{
const SDL_VideoInfo* info = SDL_GetVideoInfo();
screenWidth = info->current_w;
screenHeight = info->current_h;
Window(640, 480, "Flatgu game", "rsc/img/icon.bmp");
}
window.h
class Window
{
public:
Window();
~Window();
int getWidth() {return width;}
int getHeight() {return height;}
bool isFullscreen() {return fullscreen;}
void toggleFullscreen();
private:
Window(int w, int h, const char *title, const char *icon);
bool fullscreen, running;
int height, width, screenWidth, screenHeight;
SDL_Surface *screen;
};
Он компилируется нормально, но затем, после компиляции, я получаю эту ужасную ошибку:
В чем причина моей проблемы? Почему я получаю такие странные цифры?
Моя цель — сохранить оригинальное разрешение экрана для дальнейшего использования. (лайк переключение в полноэкранный режим), и я должен сделать это перед звонком SDL_SetVideoMode()
, Вот почему это в конструкторе.
У вас есть проблема с вызовом SDL Video Functions до фактической инициализации SDL.
SDL_Init( SDL_INIT_EVERYTHING )
должен быть вызван до
SDL_GetVideoInfo();
В вашем случае вы звоните SDL_GetVideoInfo();
первый
const SDL_VideoInfo* info = SDL_GetVideoInfo(); //<-- calls SDL_GetVideoInfo();
screenWidth = info->current_w;
screenHeight = info->current_h;
Window(640, 480, "Flatgu game", "rsc/img/icon.bmp"); //<-- initializes SDL
Так что решение простое; сделать звонок SDL_Init( SDL_INIT_EVERYTHING )
сразу в начале вашей программы, затем вы можете позвонить SDL_GetVideoInfo();
сколько хочешь.
Вам придется немного реструктурировать окно вашего класса.
Чтобы получить Лучший вызов в режиме видео SDL_GetVideoInfo
перед настройкой видео (перед звонком SDL_SetVideoMode
).
Но вам все равно придется инициализировать подсистему видео перед вызовом (SDL_Init(SDL_INIT_VIDEO)
).
Я знаю, что это старо, но в коде есть большая ошибка.
Window(640, 480, "Flatgu game", "rsc/img/icon.bmp");
создает безымянный экземпляр Window, поэтому вызывающий его экземпляр все равно будет иметь неинициализированные переменные. Похоже, вы пытались использовать делегирующие конструкторы, но в этом случае вызов другого конструктора должен быть в списке инициализатора члена.
Увидеть эта страница.