Skip to main content
code update
Source Link
Adam
  • 77
  • 1
  • 6
//level1.h
class Level1: public Level
{
  public:
    Level1();
   ~Level1();

    void load();
    void unload();

    void update();
    void draw();
};
//level1.cpp
Level1::Level1()
{
}
Level1::~Level1()
{
  enemy.clear();

  Mix_FreeMusic(music = NULL;);
  SDL_FreeSurface(background);
 = NULL;SDL_FreeSurface(background2);

  background2music = NULL;
 
  Mix_FreeMusic(music);
background = SDL_FreeSurface(background);NULL;
  SDL_FreeSurface(background2); = NULL;

  Mix_CloseAudio();
}

void Level1::load()
{ 
  music = Mix_LoadMUS("music/song1.xm");
  background = loadImage("image/background.png");
  background2 = loadImage("image/background2.png");

  Mix_OpenAudio(48000, MIX_DEFAULT_FORMAT, 2, 4096);
  Mix_PlayMusic(music, -1); 
}
void Level1::unload()
{
}
//functions have level-specific code in them...
//level1.h
class Level1: public Level
{
  public:
    Level1();
   ~Level1();

    void load();
    void unload();

    void update();
    void draw();
};
//level1.cpp
Level1::Level1()
{
}
Level1::~Level1()
{
  enemy.clear();

  music = NULL;
  background = NULL;
  background2 = NULL;
 
  Mix_FreeMusic(music);
  SDL_FreeSurface(background);
  SDL_FreeSurface(background2);

  Mix_CloseAudio();
}

void Level1::load()
{ 
  music = Mix_LoadMUS("music/song1.xm");
  background = loadImage("image/background.png");
  background2 = loadImage("image/background2.png");

  Mix_OpenAudio(48000, MIX_DEFAULT_FORMAT, 2, 4096);
  Mix_PlayMusic(music, -1); 
}
void Level1::unload()
{
}
//functions have level-specific code in them...
//level1.h
class Level1: public Level
{
  public:
    Level1();
   ~Level1();

    void load();
    void unload();

    void update();
    void draw();
};
//level1.cpp
Level1::Level1()
{
}
Level1::~Level1()
{
  enemy.clear();

  Mix_FreeMusic(music);
  SDL_FreeSurface(background);
  SDL_FreeSurface(background2);

  music = NULL;
  background = NULL;
  background2 = NULL;

  Mix_CloseAudio();
}

void Level1::load()
{ 
  music = Mix_LoadMUS("music/song1.xm");
  background = loadImage("image/background.png");
  background2 = loadImage("image/background2.png");

  Mix_OpenAudio(48000, MIX_DEFAULT_FORMAT, 2, 4096);
  Mix_PlayMusic(music, -1); 
}
void Level1::unload()
{
}
//functions have level-specific code in them...
updated code
Source Link
Adam
  • 77
  • 1
  • 6

I'm trying to write my level classes by having a base class that each level class inherits from...The base class uses pure virtual functions.

My base class is only going to be used as a vector that'll have the inherited level classes pushed onto it...This is what my code looks like at the moment, I've tried various things and get the same result (segmentation fault).

//level.h
class Level
{
  protected:
    Mix_Music *music;
    SDL_Surface *background;
    SDL_Surface *background2;

    vector<Enemy> enemy;

    bool loaded;
    int time;
  public:
    Level();
    virtual ~Level();

    int bgX, bgY;
    int bg2X, bg2Y;
    int width, height;

    virtual void load();
    virtual void unload();

    virtual void update();
    virtual void draw();
};
//level.cpp
Level::Level()
{
  bgX = 0;
  bgY = 0;
  bg2X = 0;
  bg2Y = 0;
  width = 2048;
  height = 480;

  loaded = false;
  time = 0; 
}
Level::~Level()
{
}
//virtual functions are empty...

I'm not sure exactly what I'm supposed to include in the inherited class structure, but this is what I have at the moment...

//level1.h
class Level1: public Level
{
  public:
    Level1();
   ~Level1();

    void load();
    void unload();

    void update();
    void draw();
};
//level1.cpp
Level1::Level1()
{
}
Level1::~Level1()
{
  enemy.clear();

  music = NULL;
  background = NULL;
  background2 = NULL;

  Mix_FreeMusic(music);
  SDL_FreeSurface(background);
  SDL_FreeSurface(background2);

  Mix_CloseAudio();
}

void Level1::load()
{ 
  music = Mix_LoadMUS("music/song1.xm");
  background = loadImage("image/background.png");
  background2 = loadImage("image/background2.png");

  Mix_OpenAudio(48000, MIX_DEFAULT_FORMAT, 2, 4096);
  Mix_PlayMusic(music, -1); 
}
void Level1::unload()
{
}
//functions have level-specific code in them...

Right now for testing purposes, I just have the main loop call Level1 level1; and use the functions, but when I run the game I get a segmentation fault. This is the first time I've tried writing inherited classes, so I know I'm doing something wrong, but I can't seem to figure out what exactly.

I'm trying to write my level classes by having a base class that each level class inherits from...The base class uses pure virtual functions.

My base class is only going to be used as a vector that'll have the inherited level classes pushed onto it...This is what my code looks like at the moment, I've tried various things and get the same result (segmentation fault).

//level.h
class Level
{
  protected:
    Mix_Music *music;
    SDL_Surface *background;
    SDL_Surface *background2;

    vector<Enemy> enemy;

    bool loaded;
    int time;
  public:
    Level();
   ~Level();

    int bgX, bgY;
    int bg2X, bg2Y;
    int width, height;

    virtual void load();
    virtual void unload();

    virtual void update();
    virtual void draw();
};
//level.cpp
Level::Level()
{
  bgX = 0;
  bgY = 0;
  bg2X = 0;
  bg2Y = 0;
  width = 2048;
  height = 480;

  loaded = false;
  time = 0; 
}
Level::~Level()
{
}
//virtual functions are empty...

I'm not sure exactly what I'm supposed to include in the inherited class structure, but this is what I have at the moment...

//level1.h
class Level1: public Level
{
  public:
    Level1();
   ~Level1();

    void load();
    void unload();

    void update();
    void draw();
};
//level1.cpp
Level1::Level1()
{
}
Level1::~Level1()
{
  enemy.clear();

  music = NULL;
  background = NULL;
  background2 = NULL;

  Mix_FreeMusic(music);
  SDL_FreeSurface(background);
  SDL_FreeSurface(background2);

  Mix_CloseAudio();
}

void Level1::load()
{ 
  music = Mix_LoadMUS("music/song1.xm");
  background = loadImage("image/background.png");
  background2 = loadImage("image/background2.png");

  Mix_OpenAudio(48000, MIX_DEFAULT_FORMAT, 2, 4096);
  Mix_PlayMusic(music, -1); 
}
void Level1::unload()
{
}
//functions have level-specific code in them...

Right now for testing purposes, I just have the main loop call Level1 level1; and use the functions, but when I run the game I get a segmentation fault. This is the first time I've tried writing inherited classes, so I know I'm doing something wrong, but I can't seem to figure out what exactly.

I'm trying to write my level classes by having a base class that each level class inherits from...The base class uses pure virtual functions.

My base class is only going to be used as a vector that'll have the inherited level classes pushed onto it...This is what my code looks like at the moment, I've tried various things and get the same result (segmentation fault).

//level.h
class Level
{
  protected:
    Mix_Music *music;
    SDL_Surface *background;
    SDL_Surface *background2;

    vector<Enemy> enemy;

    bool loaded;
    int time;
  public:
    Level();
    virtual ~Level();

    int bgX, bgY;
    int bg2X, bg2Y;
    int width, height;

    virtual void load();
    virtual void unload();

    virtual void update();
    virtual void draw();
};
//level.cpp
Level::Level()
{
  bgX = 0;
  bgY = 0;
  bg2X = 0;
  bg2Y = 0;
  width = 2048;
  height = 480;

  loaded = false;
  time = 0; 
}
Level::~Level()
{
}
//virtual functions are empty...

I'm not sure exactly what I'm supposed to include in the inherited class structure, but this is what I have at the moment...

//level1.h
class Level1: public Level
{
  public:
    Level1();
   ~Level1();

    void load();
    void unload();

    void update();
    void draw();
};
//level1.cpp
Level1::Level1()
{
}
Level1::~Level1()
{
  enemy.clear();

  music = NULL;
  background = NULL;
  background2 = NULL;

  Mix_FreeMusic(music);
  SDL_FreeSurface(background);
  SDL_FreeSurface(background2);

  Mix_CloseAudio();
}

void Level1::load()
{ 
  music = Mix_LoadMUS("music/song1.xm");
  background = loadImage("image/background.png");
  background2 = loadImage("image/background2.png");

  Mix_OpenAudio(48000, MIX_DEFAULT_FORMAT, 2, 4096);
  Mix_PlayMusic(music, -1); 
}
void Level1::unload()
{
}
//functions have level-specific code in them...

Right now for testing purposes, I just have the main loop call Level1 level1; and use the functions, but when I run the game I get a segmentation fault. This is the first time I've tried writing inherited classes, so I know I'm doing something wrong, but I can't seem to figure out what exactly.

Source Link
Adam
  • 77
  • 1
  • 6

Problem creating levels using inherited classes/polymorphism

I'm trying to write my level classes by having a base class that each level class inherits from...The base class uses pure virtual functions.

My base class is only going to be used as a vector that'll have the inherited level classes pushed onto it...This is what my code looks like at the moment, I've tried various things and get the same result (segmentation fault).

//level.h
class Level
{
  protected:
    Mix_Music *music;
    SDL_Surface *background;
    SDL_Surface *background2;

    vector<Enemy> enemy;

    bool loaded;
    int time;
  public:
    Level();
   ~Level();

    int bgX, bgY;
    int bg2X, bg2Y;
    int width, height;

    virtual void load();
    virtual void unload();

    virtual void update();
    virtual void draw();
};
//level.cpp
Level::Level()
{
  bgX = 0;
  bgY = 0;
  bg2X = 0;
  bg2Y = 0;
  width = 2048;
  height = 480;

  loaded = false;
  time = 0; 
}
Level::~Level()
{
}
//virtual functions are empty...

I'm not sure exactly what I'm supposed to include in the inherited class structure, but this is what I have at the moment...

//level1.h
class Level1: public Level
{
  public:
    Level1();
   ~Level1();

    void load();
    void unload();

    void update();
    void draw();
};
//level1.cpp
Level1::Level1()
{
}
Level1::~Level1()
{
  enemy.clear();

  music = NULL;
  background = NULL;
  background2 = NULL;

  Mix_FreeMusic(music);
  SDL_FreeSurface(background);
  SDL_FreeSurface(background2);

  Mix_CloseAudio();
}

void Level1::load()
{ 
  music = Mix_LoadMUS("music/song1.xm");
  background = loadImage("image/background.png");
  background2 = loadImage("image/background2.png");

  Mix_OpenAudio(48000, MIX_DEFAULT_FORMAT, 2, 4096);
  Mix_PlayMusic(music, -1); 
}
void Level1::unload()
{
}
//functions have level-specific code in them...

Right now for testing purposes, I just have the main loop call Level1 level1; and use the functions, but when I run the game I get a segmentation fault. This is the first time I've tried writing inherited classes, so I know I'm doing something wrong, but I can't seem to figure out what exactly.