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 :

Membre de classe/vector


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Par défaut Membre de classe/vector
    Bonjour, j'ai un problème, je bloque dessus depuis plusieurs heures déjà et je n'en vois pas le bout...

    J'ai uen classe Perso :
    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
    struct position {
    	int para;
    	int meri;
    };
     
     
    class Perso {
      public:
              Perso();
              Perso(string n, int v,int e, Sac s, int p, int m);
              ~Perso();
     
              string getNom() const ;
              int getVitesse() const ;
              void setVitesse(int v);
              int getEnergie() const;
              void setEnergie(int e);
              int getParallele() const;
              int getMeridien() const;
              void setPosition(int p, int m);
    	  Sac getSac() const;
              void frapper(Perso p);
     
              virtual char typePerso() { return 'p'; }
     
     
      protected:
              string nom;
              int vitesse,energie;
              Sac s;
              position pos;
              friend ostream &operator << (ostream &os, const Perso &p);
    };

    Et j'aimerai afficher juste le parallele du perso avec un vector :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void Carte::afficherTousPerso() {
      vector<Perso> * p;
      vector<Perso>::iterator i;
      for (i = (*p).begin(); i != (*p).end(); i++)
        {
    	int para = (*p)[0].getParallele();
    	cout << para << endl;
        }
    }
    Il me sort un seg fault, au niveau du (*p)[0]...
    Il y a-t-il une autre facon d'acceder a un membre d'une classe ou ma méthode est bonne, juste mal codé ?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Salut,

    Si tu ne précises pas de quel Perso il s'agit, le compilateur ne va pas l'inventer pour toi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void Carte::afficherTousPerso() {
    vector<Perso> * p;
    vector<Perso>::iterator i;
    for (i = (*p).begin(); i != (*p).end(); i++)
    {
    int para = (*p)[0].getParallele();
    cout << para << endl;
    }
    }
    MAT.

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    De plus, tu définis un itérateur que tu n'utilises pas...

    Ton code est moyen moyen ça c'est certain, par contre je comprend pas pourquoi ça plante, ton vecteur étant vide il ne devrait même pas passer dans la boucle....

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par défaut
    Citation Envoyé par poukill Voir le message
    par contre je comprend pas pourquoi ça plante, ton vecteur étant vide il ne devrait même pas passer dans la boucle....
    Ca plante parce que p n'est pas initialisé, et déréférencer un pointeur non initialisé c'est le plantage assuré.
    Bon ok ma première réponse était au mieux énigmatique et au pire partiellement fausse, c'est sûr...

    MAT.

  5. #5
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    Déréférencer un pointeur null, on va droit dans le mur, ça tout le monde est d'accord.
    Ce qui me dérange, c'est
    Il me sort un seg fault, au niveau du (*p)[0]...
    Chez moi ce code pourri fonctionne (Visual 2005) et ne rentre pas dans la boucle.
    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
     
    #include <iostream>
    #include <vector>
     
    struct Perso
    {
    	int getParallele() const { return 1; }
    };
     
    using namespace std;
     
    int main()
    {
    	vector<Perso> * p;
    	vector<Perso>::iterator i;
    	for (i = (*p).begin(); i != (*p).end(); i++)
    	{
    		int para = (*p)[0].getParallele();
    		cout << para << endl;
    	}
     
    	return 0;
    }

  6. #6
    Membre éprouvé Avatar de BainE
    Inscrit en
    Mai 2004
    Messages
    1 327
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 1 327
    Par défaut
    Visual c'est mal, c'est comme les char étoiles.

    Peut etre en initialisant le vector a NULL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vector<Perso> * p = NULL;
    la sa va peut etre claquer

  7. #7
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 13
    Par défaut
    Mais alors y a t il un autre moyen d'acceder a getparallele avec les vecteurs ?

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 03/06/2008, 13h19
  2. "class" vector à indice variable et fonction membr
    Par icetechnik dans le forum C++
    Réponses: 14
    Dernier message: 25/11/2005, 23h46
  3. utilisation classe vector et supression de doublons
    Par vandevere dans le forum SL & STL
    Réponses: 1
    Dernier message: 30/06/2005, 11h17
  4. [Perf]Htable vs class Vector
    Par nicoo dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 14/11/2004, 10h11
  5. [Vector] classe Vector et exception
    Par Nanoua dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 23/04/2004, 12h37

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