
Сообщение от
dimakozyr
В смысле не этот? Он у меня всего один в программе объявлен.
В прямом смысле. Где вы его объявляете? Это поле класса C_Scenes, которое инициализируется нолём при создании объектов этого класса:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| class C_Scenes: protected C_Button {
public:
C_Scenes() : img_background_3(0), screen(0) {} // инициализация screen нолём
void loadImages();
void cleanMemory();
void blittingImage(int, int, SDL_Surface*, SDL_Surface*);
void keyEvents();
void sceneDraw_3();
void sceneDraw_4();
inline SDL_Surface* getScreen() { return screen; }
inline void setScreen(SDL_Surface* variable) { screen = variable; }
private:
SDL_Surface* img_background_3;
SDL_Surface* screen; // вот он
}; |
|
Один объет этого класса создаётся при создании объекта класса C_MainClass, в начале работы программы:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| class C_MainClass {
public:
C_Scenes o_scenes; // тут есть screen, который будет инициализирован нолём при создании объекта
void initSDL();
void startAllMethods();
private:
enum {_screenWidth = 960,
_screenHeigth = 640,
_screenColorBits = 32};
}; |
|
Потом, при вызове метода startAllMethods(), в котором делается вызов initSDL(), полю screen этого объекта (o_scenes) присваивается значение:
C++ |
1
2
3
4
| C_MainClass::initSDL() {
SDL_Init(SDL_INIT_EVERYTHING);
o_scenes.setScreen(SDL_SetVideoMode(_screenWidth, _screenHeigth,
_screenColorBits, SDL_SWSURFACE)); |
|
Кроме этого объекта (в классе C_MainClass), у вас, в файле C_DrawScene_1.cpp, объявлен глобальный объект класса C_Scenes, по имени o_scenesC_DrawScene_1, в котором тоже есть screen, инициализируемый нолём, при создании этого объекта:
C++ |
1
2
3
4
5
6
| #include "C_DrawScene_1.h"
#include "C_Scenes.h"
#include "C_Button.h"
C_Scenes o_scenesC_DrawScene_1;
... |
|
Но screen этого объекта так и остаётся равен NULL.
Потом в методах, в файле C_DrawScene_1.cpp, происходит попытка обращения по нулевому указателю:
C++ |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| void C_DrawScene_1::scene_1_events() {
C_Button o_buttonC_DrawScene_1;
C_Button o_button_1_play (150, 100, 650, 218);
C_Button o_button_1_sound (200, 400, 106, 106);
C_Button o_button_1_facebook(400, 400, 106, 106);
C_Button o_button_1_twitter (600, 400, 106, 106);
scene_1_loadImages();
int isCicleEnd = 0;
while(isCicleEnd == 0)
if(SDL_PollEvent(&o_buttonC_DrawScene_1.getEvent())) {
o_button_1_play. buttonEvents(&o_buttonC_DrawScene_1.getEvent(), 0);
o_button_1_sound. buttonEvents(&o_buttonC_DrawScene_1.getEvent(), 1);
o_button_1_facebook.buttonEvents(&o_buttonC_DrawScene_1.getEvent(), 2);
o_button_1_twitter. buttonEvents(&o_buttonC_DrawScene_1.getEvent(), 3);
if(o_buttonC_DrawScene_1.getEvent().type == SDL_QUIT)
isCicleEnd = 1;
//if(o_buttonC_DrawScene_1.getEvent().type = SDL_KEYDOWN &&
// o_buttonC_DrawScene_1.getEvent().key.keysym.sym == SDLK_ESCAPE)
//isCicleEnd = 1;
SDL_Flip(o_scenesC_DrawScene_1.getScreen()); // !!! первая попытка обращения
}
scene_1_clean();
} |
|