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 :

[ogre] Problème avec un conteneur vector


Sujet :

C++

  1. #1
    Invité
    Invité(e)
    Par défaut [ogre] Problème avec un conteneur vector
    Salut,

    alors dans mon programme j'ai des conteneur de type std::Vector pour y mettre des entity.

    donc ça me donne un truc comme ça

    mon .h


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    // déclaration
     vector <Ogre::Entity*> mEntityTab;           // un vector d'Entity qui va contenir toute les entités composant le corps du PJ
     vector <Ogre::Entity*>::iterator mEntityIterator;

    mon .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
    // je mets toutes mes entités dans mon vector
        mEntityTab.push_back(mEntityTete);
        mEntityTab.push_back(mEntityCorps);
        mEntityTab.push_back(mEntityMainD);
        mEntityTab.push_back(mEntityMainG);
        mEntityTab.push_back(mEntityPiedD);
        mEntityTab.push_back(mEntityPiedG);
        mEntityTab.push_back(mEntityOeilD);
        mEntityTab.push_back(mEntityOeilG);
     
     
    // ici le but c'est d'attacher tout les entités de mon vector à un node parent appelé mNodePJ
    for(mEntityIterator = mEntityTab.begin(); mEntityIterator!=mEntityTab.end(); ++mEntityIterator){
     
            mNodePJ->attachObject(*mEntityIterator);   //cette ligne buggue
     }




    Le compilateur n'affiche pas d'erreur mais le programme bugge au lancement

  2. #2
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Sans l'erreur, comment veux tu que l'on sache ce qui ne va pas?

    Jusqu'ici il n'y a rien de suspect dans le peu de code que tu as montré.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Y a pas de message d'erreur justement y a une juste une fenetre de windows qui dit que jeu.exe à cessé de fonctionné, windows recherche une solution au problème.

    L'erreur se produit avec la ligne mNodePJ->attachObject(*mEntityIterator); sans ça le programme tourne normalement

  4. #4
    Membre habitué Avatar de Xtrem_Voyageur
    Homme Profil pro
    Inscrit en
    Juin 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2009
    Messages : 85
    Points : 154
    Points
    154
    Par défaut
    Conclusion:
    il faudrait qu'on en sache plus sur ton Node et le membre attachObject()

  5. #5
    Invité
    Invité(e)
    Par défaut
    ben mNodePj est simplement une instance de la classe SceneNode de Ogre et attachObject() est une méthode de cette objet.

    attachObject()
    virtual void Ogre::SceneNode::attachObject ( MovableObject * obj ) [virtual]

    Adds an instance of a scene object to this node.

    Remarks:
    Scene objects can include Entity objects, Camera objects, Light objects, ParticleSystem objects etc. Anything that subclasses from MovableObject.



    // je le déclare comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mNodePJ = pSceneMgr->getRootSceneNode()->createChildSceneNode(mName+"PJNode");


    Quand j'attache mes entity à mNodePJ sans passé par un vector ben ça marche bien. ça ca marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      mNodePJ->attachObject(mEntityTete);
        mNodePJ->attachObject(mEntityCorps);
        mNodePJ->attachObject(mEntityMainD);
        mNodePJ->attachObject(mEntityMainG);
        mNodePJ->attachObject(mEntityPiedD);
        mNodePJ->attachObject(mEntityPiedG);
        mNodePJ->attachObject(mEntityOeilD);
        mNodePJ->attachObject(mEntityOeilG);
    mais pas ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mNodePJ->attachObject(*mEntityIterator);

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2011
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Quand je travaille avec un vecteur, personnellement je préfère le parcourir avec la forme for(unsigned int i = 0; i<getVecteur.size(); i++), mais bon, c'est une question de goût. Ceci pour dire que je ne suis pas le plus grand spécialiste des itérateurs.

    Mais dans ton code, je me demande si c'est OK de déréférencer ton itérateur mEntityIterator en la passant en argument à ta fonction attachObject puisque celle-ci s'attend, d'après sa signature, à recevoir un pointeur, ce qu'est justement, il me semble, un itérateur de la classe Vector.

    Autre piste: si tu veux avoir plus de précisions sur le teneur du message d'erreur que Windows te donne, fais tourner ton code avec le débogueur. Si le message d'erreur du débogueur mentionne quelque chose comme "class Vector... subtype... out of range" ne cherche plus. Tu essaies d'atteindre une position de ton vecteur qui n'existe pas, classiquement avec une boucle. Je l'ai personnellement appris "à la dure"

    Aller... Bonne chance!

  7. #7
    Membre expert
    Avatar de Klaim
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2004
    Messages
    1 717
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 1 717
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par bgauvreau Voir le message
    Quand je travaille avec un vecteur, personnellement je préfère le parcourir avec la forme for(unsigned int i = 0; i<getVecteur.size(); i++), mais bon, c'est une question de goût. Ceci pour dire que je ne suis pas le plus grand spécialiste des itérateurs.
    Disons que si tu n'as pas besoin de l'index, il est préférable de passer par un iterateur.

    Mais dans ton code, je me demande si c'est OK de déréférencer ton itérateur mEntityIterator en la passant en argument à ta fonction attachObject puisque celle-ci s'attend, d'après sa signature, à recevoir un pointeur, ce qu'est justement, il me semble, un itérateur de la classe Vector.
    Je ne vois pas le problème : le déférencement de l'itérateur donne un pointeur. Si ce code n'était pas valide à cause d'un problème de type, il ne compilerait pas. Ou alors il faudrait un cas vicieux de surcharge d'opérateur mais j'y crois pas du tout.

    Autre piste: si tu veux avoir plus de précisions sur le teneur du message d'erreur que Windows te donne, fais tourner ton code avec le débogueur. Si le message d'erreur du débogueur mentionne quelque chose comme "class Vector... subtype... out of range" ne cherche plus. Tu essaies d'atteindre une position de ton vecteur qui n'existe pas, classiquement avec une boucle. Je l'ai personnellement appris "à la dure"

    Aller... Bonne chance!


    Ce qui me fait penser : d'après le type d'erreur, déjà il faut nous dire si ça le fait en debug ou release.
    Ensuite, je voudrais que tu retentes le code qui ne marche pas après avoir TOUT recompilé, Ogre y compris. Il y a des chances pour que le link dynamique ne se fasses pas comme tu le penses a cause de vieilles compilations arrêtées pendant le link ou je ne sais quoi. Donc juste tout recompiler pour bien être sur qu eça viens du code et pas du contexte.

    Enfin, si ça ne marche toujours pas, alors il y a quelque chose que tu fais que l'on ne sait pas. Le code que tu dis qui marche et celui qui ne marche pas sont globalement la même chose, et semblent normaux. Il y a peut être une manipulation que tu fais qui ne marche pas OU ALORS tu es leurré par ton debuggeur parceque tu es en release et qu'il ne peut pas te donner des infos fiables.

Discussions similaires

  1. Problème avec le conteneur vector
    Par Dolphin Dice dans le forum C++
    Réponses: 10
    Dernier message: 14/01/2011, 00h49
  2. problème avec les conteneurs STL
    Par burak dans le forum SL & STL
    Réponses: 7
    Dernier message: 19/04/2009, 18h43
  3. Problème avec la classe Vector.
    Par kaelem dans le forum Langage
    Réponses: 10
    Dernier message: 28/12/2006, 10h19
  4. [gsoap] Problème avec les std::vector
    Par LePhasme dans le forum SL & STL
    Réponses: 1
    Dernier message: 25/04/2006, 12h46

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