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 :

comment accéder au méthode des objets contenue dans un vector avec un pointeur pointant sur ce vecteur


Sujet :

C++

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut comment accéder au méthode des objets contenue dans un vector avec un pointeur pointant sur ce vecteur
    Bonjour,

    Je n'arrive pas a lancer une méthode contenu dans un de mes objets dont un pointeur de cette objets est contenu dans un tableau de ce type d'objets lui même contenu dans une référence passer en pointeur a une fonction de threads .....
    Voici un petit peu de code pour illustrer mon exemple:

    Ma structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct argopengldrawn
    {
        std::vector<CPhysBox*> *cube;
        FPSmanager manager;
        freecamera *camera;
    };
    Ma fonction :
    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
    void* f_drawn (void* objets)
    {
        argopengldrawn* arggl=(argopengldrawn*)objets;
     
        while(1)
        {
        GetFPS ();
       glClearColor(0.0f, 0.0, 0.0, 0.0);
       glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
       glLoadIdentity ();
     
       arggl->camera->look();
     
       SDL_framerateDelay (&(arggl->manager));
     
       for (unsigned int i = 0 ; i < arggl->cube->size(); i++)
       {
           arggl->cube[i]->Render(); //ligne qui cause l'erreur
       }
     
     
       SDL_GL_SwapBuffers();
        }
       return (void*)NULL;
    }

    J'ai donc une erreur :
    error: base operand of `->' has non-pointer type `std::vector<CPhysBox*, std::allocator<CPhysBox*> >'|
    Si quelqu'un pouvait m'aider un grand merci !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Pourquoi utiliser une pointeur sur une vecteur ? Il y a une raison particulière ?
    Dernière modification par Invité ; 29/05/2010 à 16h52.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Pourquoi déclarer le type du paramètre objets en void* alors qu'on connait son type ? Autrement dit, je ne vois pas l'intérêt d'un transtypage dans ce cas là.
    Dans le même ordre d'idée, pourquoi préciser le type de NULL pour le pointeur retourné?

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    En fait c'est comma ça parce que la fonction est une fonction de thread qui s'exécute donc en parallèle j'utilise la librairie p_threads qui oblige les fonction passer en thread a avoir se type de prototype .....

    Je renvoie un Null car je nai rien a renvoyer et sa évite le warning ....

  5. #5
    Membre chevronné
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Points : 1 921
    Points
    1 921
    Par défaut
    boost::thread fournit un mecanisme plus propre que void* et devrait etr eprivilégier à pthread.

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Ok merci je vais voir du cotée de boost thread mais n'y a t'il pas un moyen de faire sa avec pthread ?

    edit: enfaite j'aimerai rester sur p_thread qui a plus simple quelqu'un a une solution ??

    edit2: Enfaite la vraie question c'est comment accéder au méthode des objets
    contenue dans un vector avec un pointeur pointant sur ce vecteurs ..

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 16
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    arggl->(*cube)[i]->Render();

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    @zeeboub Sa ne marche pas ......

  9. #9
    Invité
    Invité(e)
    Par défaut
    Plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (*arggl->cube)[i]->Render();

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Un grand merci sa marche !!!


    edit : Non enfaite j'ai une segmentation fault ....


    comment je peut faire pour que a chaque fois que mon tableau est modifier mon pointeur pointe bien dessus ?

  11. #11
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Salut

    Citation Envoyé par izissie Voir le message
    edit : Non enfaite j'ai une segmentation fault ....


    comment je peut faire pour que a chaque fois que mon tableau est modifier mon pointeur pointe bien dessus ?
    C'est que ta mémoire ne doit pas être gérée comme il faut. A mon avis, tu essayes d'accéder à ton tableau alors qu'il a été détruit. Il faut que tu l'alloues dynamiquement pour pouvoir promener le pointeur. Je suis prêt à parier que tu l'as alloué en statique et que le bloc de code ou se trouve cette allocation a terminé de s'exécuter quand tu essaye d'accéder au pointeur.

    Voir ici.
    Find me on github

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Je ne crois pas que mon tableau soit détruit je regarderais sa ce soir quen je serais chez moi sinon merci

    edit:Je ne pas trouver comment faire pour repointer mon pointeur au bonne endroit ....

  13. #13
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Mon tableau n'est pas détruit car les fonctions arrive bien a récupérer sa taille il y a des problème que lorsque j'essaye d'agrandir le tableau d'où ma question comment être sur qu'un pointeur pointe bien au bonne endroit .....



    edit:Mon tableau contient des classes fille du type mis dans le tableau esce que l'erreur viens d'ici ?

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    à la deuxième ligne, vous faites ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        argopengldrawn* arggl=(argopengldrawn*)objets;
    C'est à dire que vous déclarez un pointeur sur une variable arggl, du type argopenargdrawn.
    C'est à dire qu'en mémoire vous ne réservez pas la place pour la structure, mais seulement pour 4 octets.
    Quand vous écrivez qu'un pointeur sur un objet est égal au pointeur sur un objet, vous faites une duplication du nom, mais pas de l'objet, sauf si l'opérateur '=' a été surchargé. Si c'est le cas, aucune place mémoire n'aura été reservée et cela ne peut faire qu'un écrasement de mémoire.
    On pourrait faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        argopengldrawn* arggl= new argopengldrawn((argopengldrawn*)objets);
    Si la classe argopengldrawn contient un constructeur de copie, sinon, il suffit de faire la copie juste après.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Je ne suis pas du tout d'accord :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (argopengldrawn*)objets;
    est un juste un cast, il ne veut pas créer un nouvel objet en mémoire, juste modifier celui qui existe(je suppose). Par contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    argopengldrawn* arggl= new argopengldrawn((argopengldrawn*)objets);
    est invalide puisque le constructeur auto-généré par le compilateur est de cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    argopengldrawn(argopengldrawn const& other);
    et non pas de celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    argopengldrawn(argopengldrawn const* other);

  16. #16
    Invité
    Invité(e)
    Par défaut
    Bonjour, Joe Dralliam

    Ok pour la faute de syntaxe. J'essayais de dire que si on copie un pointeur seulement, on ne copie pas l'objet sur lequel il pointe. Etant donné que ce programme travaille en arrière plan, à chaque instant tous ses éléments doivent être parfaitement indépendants de ce qui se passe ailleurs.

  17. #17
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    En fait objets n'est pas du tout un objet contrairement a ce que l'on pourrait penser en fait c'est la structure passée en paramètre a la fonction ....

  18. #18
    Membre expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Points : 3 156
    Points
    3 156
    Par défaut
    Ce sont des objets d'une classe fille mais en fait ce ne sont pas des objets mais des structures ???

    Il faut que tu fasses un effort, tes propos sont incompréhensibles.
    Find me on github

  19. #19
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 43
    Points : 25
    Points
    25
    Par défaut
    Desoler en gros mon vector contient un tableau de pointeur d'objets 'parent' mais qui sont inititaliser avec new avec un objets heriter de cette classe

    la structure "objets" est juste la pour envoyer les parametre a la fonction f_drawn .....

    En esperant avoir ete plus compréhensible !

  20. #20
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Quand je fais des opérations à un niveau qui dépasse le strict environnement de mon application, et surtout quand j'ai des erreurs au niveau de l'exécution, j'essaye d'écrire les fonctions à un niveau plus bas, c'est à dire me limiter aux mots clé new et delete, voire malloc et free. Il sera toujours temps, plus tard, quand tout sera testé, de faire du "pur C++".
    Les template, c'est pas si simple que ça et dans tous les cas, on ne sait pas ce qui se passe.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/12/2011, 14h44
  2. Type des objets contenu dans un datatable
    Par lasrevinu dans le forum C#
    Réponses: 4
    Dernier message: 20/05/2010, 12h47
  3. Pb liberation d'objets contenu dans un Vector
    Par pcouas dans le forum Langage
    Réponses: 1
    Dernier message: 11/06/2008, 23h00
  4. Réponses: 4
    Dernier message: 13/05/2008, 11h35
  5. Réponses: 6
    Dernier message: 14/11/2007, 15h51

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