Salut tout le monde
J'ai un problème lors de la création d'un objet. J'ai créée ma classe en pure interface mais ca c'est pas le pb.
TGA.h est juste un fichier qui contient les declarations des fonctions qui decodent le format tga et EGEPOINT3D est tout simplement une structure qui regroupe les 3 composantes x,y,z en int.
Voila le code:
EGESPRITE.h
EGESPRITE_PRIVATE.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 #include <GL\glut.h> #include "EGEPOINT3D.h" #include "TGA\TGA.h" class EGESPRITE { protected: EGESPRITE(); public: virtual ~EGESPRITE(); //A REVOIR static EGESPRITE* Create(char *Filename); virtual void Draw(int screenx,int screeny)=0; virtual void Draw(EGEPOINT3D screenposition)=0; virtual int GetSizeX(void)=0; virtual int GetSizeY(void)=0; virtual void SetSizeX(int s)=0; virtual void SetSizeY(int s)=0; virtual char* GetFilename(void)=0; //virtual bool IsCollideWith(EGESPRITE Sprite)=0; virtual EGEPOINT3D GetPosition(void)=0; virtual void SetPosition(EGEPOINT3D Pos)=0; virtual int GetPositionX(void)=0; virtual void SetPositionX(int screenx)=0; virtual int GetPositionY(void)=0; virtual void SetPositionY(int screeny)=0; virtual bool SetOrder(int Order)=0; virtual GLuint GetId(void)=0; private: virtual int GetPositionZ(void)=0; virtual void SetPositionZ(int screenz)=0; };
EGESPRITE.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 #include "EGESprite.h" #include <string> using namespace std; class EGESPRITE_PRIVATE: public EGESPRITE { private: EGEPOINT3D Position; EGEPOINT3D Size; GLuint Id; //gl_texture_t *Texture; string Filename; public: explicit EGESPRITE_PRIVATE(const char *Filename); ~EGESPRITE_PRIVATE(); void Draw(int screenx,int screeny); void Draw(EGEPOINT3D screenposition); int GetSizeX(void); int GetSizeY(void); void SetSizeX(int s); void SetSizeY(int s); char* GetFilename(void); bool IsCollideWith(EGESPRITE_PRIVATE Sprite); EGEPOINT3D GetPosition(void); void SetPosition(EGEPOINT3D Pos); int GetPositionX(void); void SetPositionX(int screenx); int GetPositionY(void); void SetPositionY(int screeny); bool SetOrder(int Order); GLuint GetId(void); private: int GetPositionZ(void); void SetPositionZ(int screenz); };
EGESPRITE_PRIVATE.cpp (juste le constructeur)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27 #include <iostream> #include "EGESprite_Private.h" using namespace std; // ------------------------------------------------------------------------------------------ EGESPRITE::EGESPRITE() { } // ------------------------------------------------------------------------------------------ EGESPRITE::~EGESPRITE() { } //-------------------------------------------------------------------- EGESPRITE* EGESPRITE::Create(char *Filename) { if(Filename==NULL) { cerr << "No file to load." << endl; return NULL; } return new EGESPRITE_PRIVATE(Filename); }
Enfin la creation de l'objet:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 EGESPRITE_PRIVATE::EGESPRITE_PRIVATE(const char *Filename) { Position.x=0; Position.y=0; Position.z=0; Size.x=0; Size.y=0; Size.z=0; this->Filename=Filename; Id=loadTGATexture(Filename,&Size.x,&Size.y); }
Au debbugger le constructeur fait bien son travail mais le pointeur TGA prend la valeur NULL à la sortie de la fonction Create et le programme plante la ligne qui suit. Au lieu d'avoir l'adresse du pointeur de TGA j'ai l'erreur cité dans le sujet . Quelqu'un voit le pb?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 EGESPRITE *TGA; TGA->Create("TGA_32bits.tga");
J'ai cherché dans la recherche mais il y a qu'un seul pb comme ca sur des listes chainées et ca m'a pas aidé.
Merci
Partager