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

SL & STL C++ Discussion :

STL, problème d'ajout d'élément dans une list.


Sujet :

SL & STL C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 23
    Points
    23
    Par défaut STL, problème d'ajout d'élément dans une list.
    Bonjour,
    Bon j'ai un petit problème... Je bosse sur un code en ce moment que je n'ai pas commencé mais que je dois finir.
    Mais je suis coincé sur une erreur qui m'a l'air stupide... pourtant je n'ai pas trouvé la solution donc j'en appelle à la communauté!!
    Je considére un objet qui ne m'appartient pas mais que je dois utiliser. Je veux le placer dans une liste de pointeurs. Mais ça ne marche pas...
    Voilà grosso modo ce que je fais.
    Peu importe la structure de cette classe car je veux juste "garder"(j'ai pas trouver le mot adéquat) un élément Objet1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Objet1{
     
    ...
     
    }
    Ensuite, dans une autre classe j'ai besoin de ma liste de pointeur sur les éléments:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Objet2{
     
        list <Objet1*> *obj;
        Objet2(list<Objet1*> * obj= NULL);
        ~Objet2();
        void Ajout(Objet1 * toto) {obj->push_back(toto);};
     
    }
    Mais quand j'appelle la fonction Ajout, j'ai une erreur de segmentation et je bloque dessus. J'ai essayé pas mal de truc mais toujours rien.
    Dés demain matin, je m'y remets .
    En attendant je vous remercie de votre aide.
    A bientôt.

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    C'est un peu normal que cela se plante:

    Le membre obj de la classe Objet2 est un pointeur sur une liste d'Objet1 mais derrière ce pointeur, il n'y a rien. C'est un pointeur fou ou NULL.

    donc quand tu appelles obj->Ajout(...), tu déréference un pointeur invalide et cela part en cacahuètes.

    Essaye ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    class Objet2{
     
        list <Objet1*> obj;
        Objet2(list<Objet1*> * obj= NULL); // je ne sais pas trop quoi faire de ce paramètre
        ~Objet2();
        void Ajout(Objet1 * toto) {obj.push_back(toto);};
     
    }

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 23
    Points
    23
    Par défaut
    J'avais essayé comme ça mais sans la déclaration du pointeur null dans le constructeur.
    Je vais réessayer, peut-être avais-je mal fait tout ça.
    Par contre, je ne vois plus trop l'intêret d'initialiser un pointeur null, non!?
    Etant donnée que par la suite je travaille sur obj et non sur un pointeur vers lui, a quel moment j'initialise ma list?
    A la création de mon Objet2, je veux juste une liste vide. Par la suite j'y ajouterai des éléments.
    J'essaie tout ça!!
    Merci pour ton aide

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 23
    Points
    23
    Par défaut
    Bon, j'ai essayé dans mon code et tout marche!!!
    Par contre je trouve ça toujours bizarre du coup l'initialisation d'un pointeur...
    Merci beaucoup pour ton aide ram-0000.

  5. #5
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par hyuga33 Voir le message
    Par contre je trouve ça toujours bizarre du coup l'initialisation d'un pointeur...
    Que trouves tu bizarre ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 23
    Points
    23
    Par défaut
    Dans le constructeur, on initialise un pointeur sur l'attribut.
    Je ne comprends pas en quoi ça initialise cet attribut, surtout qu'après on utilise plus de pointeurs pour y accéder.

  7. #7
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Citation Envoyé par hyuga33 Voir le message
    Dans le constructeur, on initialise un pointeur sur l'attribut.
    Non non.

    Dans le constructeur, tu définis un paramètre d'appel qui se nomme obj, qui est un pointeur et dont la valeur par défaut est NULL (si tu utilises un constructeur sans paramètre).

    Le nom de ce paramètre apporte la confusion avec l'attribut obj (je ne sais pas si le mot attribut est très C++) qui est du type list<> qui est un membre de la classe. Ces 2 objets (le paramètres et le membre de classe) sont totalement différents et le compilateur fait très bien la différence même s'ils portent le même nom de manière maladroite. De toute façon, si le compilateur a le moindre doute, il va générer un message d'insultes.

    D'où l'intérêt d'avoir une politique de nommage qui permet d'éviter ces confusions.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 68
    Points : 23
    Points
    23
    Par défaut
    D'accord!
    Je me suis fait avoir par le nom de l'argument. Je comprends mieux maintenant pourquoi je m'en sortais pas. Pour moi, l'argument et le membre de la classe devait être identique.
    Merci beaucoup pour ton aide et tes explications qui m'éviteront de retomber dans ce genre de piège.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/11/2007, 13h11
  2. Réponses: 8
    Dernier message: 27/04/2007, 14h07
  3. Réponses: 12
    Dernier message: 12/03/2007, 16h58
  4. Correction pour ajouté un élément dans une liste
    Par Rifton007 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/01/2007, 11h09
  5. ajouter un élément dans une liste
    Par Le Mérovingien dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 02/07/2006, 17h43

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