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
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_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
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.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
 
#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);
}
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
 
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);
}
Enfin la creation de l'objet:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
 
EGESPRITE *TGA;
TGA->Create("TGA_32bits.tga");
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?
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