SDL screen loading in seperate class problem

Started by
0 comments, last by Replicon 18 years, 10 months ago
In my game I have a problem when I put my initialization of video and screen in another seperate class, outside of the main.cpp file (where the event loop + main method is in) SDL_Surface *screen; void initVideo() {if ( SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) < 0 ) { printf("Unable to init SDL: %s\n", SDL_GetError()); exit(1); } screen=SDL_SetVideoMode(800,600,32,SDL_SWSURFACE|SDL_HWPALETTE); if ( screen == NULL ) { printf("Unable to set 800x600 video: %s\n", SDL_GetError()); exit(1); } } int main(int argc, char *argv[]) { initVideo(); } would work fine.... But when I put the initVideo method in another class as a static method Static void initVideo(SDL_Surface *screen) {*same method as above* } then call it in the main method Video::initVideo(screen); my program crashes..... Ive had similar problems when I load an SDL background and blit it to a screen this way as well... Help would be massivly apreciated , thanks in advance.
Advertisement
Looks like you're not assigning anything to the global screen you want to assign stuff to. You're passing in the pointer. As far as your Video::initVideo() is concerned, "screen" is a local variable... to which you assign a value successfully. But then, you're trying to do something with your uninitialized screen global. I bet you do something with your uninitialized screen after. Here, compile and run this to see what I mean:

#include <iostream>using namespace std;void assignX(int *x){    x = new int(5);    cout << "AssignX: " << *x << endl;}int main(void){    int *x = NULL;    assignX(x);    if(x == NULL) {        cout << "oh crap, I screwed up\n";    }    return 0;}


Changing your init to return the screen (screen = Video::initVideo(); ) would be a quick fix, but there's more organized ways... but I'm just mentioning why it's crashing :-).

This topic is closed to new replies.

Advertisement