IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Pb CXX0030 expression cannot be evaluated


Sujet :

C++

  1. #1
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut Pb CXX0030 expression cannot be evaluated
    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

  2. #2
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EGESPRITE *TGA;
    TGA->Create("TGA_32bits.tga");
    Tu n'as pas initialiser ton pointeur TGA... Tu ne peux donc pas appeler la fonction create normalement.

  3. #3
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut
    Oué mais si je l'initialise a NULL ca met la meme erreur. Et dans la fonction Create je fai un new donc ca devrai marcher nan?

  4. #4
    Membre très actif
    Profil pro
    Responsable technique
    Inscrit en
    Février 2006
    Messages
    366
    Détails du profil
    Informations personnelles :
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Responsable technique

    Informations forums :
    Inscription : Février 2006
    Messages : 366
    Par défaut
    Je suis trop bete j'appelais pas bien la fonction Create.
    Pour ceux que ca interesse ca leur evitera peut etre des cheveux en moins lol voila le code:
    EGESPRITE *TGA=NULL;
    TGA=EGESPRITE::Create("TGA_32bits.tga");
    Merci de m'avoir dit dinitialiser le pointeur

  5. #5
    Membre éclairé Avatar de Higestromm
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    516
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 516
    Par défaut
    Tu n'est pas obliger d'initialiser ton pointeur a NULL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EGESPRITE *TGA=EGESPRITE::Create("TGA_32bits.tga");

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. evaluation d'une expression arithmetique
    Par yasmine77 dans le forum C++
    Réponses: 4
    Dernier message: 04/04/2006, 09h11
  2. [Oracle 9i] Evaluation d'une expression
    Par Process Linux dans le forum Oracle
    Réponses: 2
    Dernier message: 21/03/2006, 12h55
  3. Evaluation d'une expression arithmétique
    Par MysticKhal_0 dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 10/03/2006, 18h25
  4. Evaluation/simplification d'expression arithmetique
    Par Premium dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 08/12/2005, 12h19
  5. [EXP] Evaluation dans une expression régulière
    Par SergentHeinz dans le forum Langage
    Réponses: 7
    Dernier message: 10/11/2005, 18h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo