Bonjour, j'ai un petit programme avec un vaisseau, j'ai une fonction pour le faire avancer : quand je compile, il marche. Seulement quand je lance le programme, pour tester, il y un message d'erreur.
"Irrlicht.exe à rencontré un problème..."
Après il demande "envoyer" ; "ne pas envoyer". (J'ai envoyé ; J'déconne !)
Alors je sais pas trop quoi faire, je pense que c'est irrlicht qu'est pas bon, mais je me doute que c'est aussi moi qui ai fait une mauvaise manip.
voila le code de ma classe.
le .cpp
#include "Vaisseau.h" Vaisseau::Vaisseau(irr::scene::ISceneManager *sceneManager) { m_position.X = 0.0f; m_position.Y = 1000.0f; m_position.Z = 40.0f; irr::scene::IAnimatedMesh* modele = sceneManager->getMesh("vaisseau.3ds"); irr::scene::IAnimatedMeshSceneNode* m_Nvaisseau = sceneManager->addAnimatedMeshSceneNode(modele); m_Nvaisseau->setPosition(m_position); } void Vaisseau::avance() { m_Nvaisseau->setPosition(m_position); }
et le .h
#ifndef VAISSEAU_H_INCLUDED #define VAISSEAU_H_INCLUDED #include <irr/irrlicht.h> class Vaisseau { public: Vaisseau(irr::scene::ISceneManager *sceneManager); void avance(); private: //Le modele qu'on va controler. irr::scene::IAnimatedMeshSceneNode *m_Nvaisseau; irr::core::vector3df m_position; }; #endif // VAISSEAU_H_INCLUDED
J'ai tout essayé, mais le fait de toucher à m_Nvaisseau dans une autre méthode que le constructeur génère une erreur quand le programme se lance. Pourtant à la compilation, il ne dit rien.
Hors ligne
Désolé mais tu ne pourrais pas lancer un débug pour trouver la ligne qui pose problème? Car un rapport d'erreur grosoft ne donne pas d'infos sur ton plantage ...
Hors ligne
A tu bien mis tes dll dans le dossier de l'exécutable, pareil pour tes modèles et textures ?
Sinon, tu doit stocker tes objets dans des variables et non des pointeurs (sauf si tu utilise l'allocation dynamique).
par exemple si tu a une fonction qui fait.
Vaisseau* declarerVaisseau (); { Vaisseau test; return &test; }
et que lors de l'appel de la fonction tu fait
Vaisseau* pointeur = declarerVaisseau ();
ça peut provoquer ce type d'erreur car test est désaloué a la fin de la fonction.
Dans ce cas la une solution serait de faire :
Vaisseau declarerVaisseau (); { Vaisseau test; return test; }
Vaisseau objet = declarerVaisseau ();
ou
Vaisseau* declarerVaisseau (); { Vaisseau* test = new Vaisseau; return test; }
Vaisseau* pointeur = declarerVaisseau ();
si tu fait comme ça, pense a libérer la mémoire :
delete pointeur;
Dernière modification par Ilovechocolat (09-01-2010 15:59:26)
Hors ligne
je pencherai sur un pointeur null pour que ca arrive si soudainement ^^
tu es sur que ton constructeur ne plante pas? car si la ligne
m_Nvaisseau->setPosition(m_position);
passe dans le constructeur je ne vois pas ce qui empecherai cette meme ligne de fonctionner dans une autre méthode....
si dans le setPosition tu mets :
void Vaisseau::avance() { if( m_Nvaisseau == NULL ) { printf( "Vaisseau::avance() - m_Nvaisseau est NULL" ); return; } m_Nvaisseau->setPosition(m_position); }
ensuite est tu au courant que cette méthode ne fera jamais avancer ton vaisseau car tu ne modifies jamais sa position?
Dernière modification par X3liF (09-01-2010 21:24:47)
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 51 invités en ligne Aucun membre connecté RSS Feed |