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 :

Vector d'objet et map de méthode.


Sujet :

SL & STL C++

Vue hybride

Mr Meuble Vector d'objet et map de... 04/06/2008, 17h57
Mr Meuble Problème résolu. Il... 06/06/2008, 10h09
r0d Merci pour ce retour positif... 06/06/2008, 11h41
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 44
    Par défaut Vector d'objet et map de méthode.
    Bonjour.

    J'essaye de calculer la somme de la valeur d'un attribut de plusieurs objet d'une classe Article mais le problème, c'est que ça ne fonctionne pas. Cette attribut est choisi en entrant son nom dans la console.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    class Article
    {
    private:	// Attributes
    	int	mId;
    	string	mName;
    	string	mReference;
    	double	mQuantity;
    	double	mUnitPrice;
    	double	mExpQuantity;
    	//...
    public:
    	//Getters And Setters
    };
    Je stocke l'ensemble des articles dans un vector 'mArticles':
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    vector<Article> mArticles;
    Pour choisir l'attribut en fonction du mot choisi, j'associe les getters de la classe Article aux mots dans une map 'mAttributes' :
    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
     
    // Gestion du type des attributs
    enum TypeEnum {TYPE_INT, TYPE_STRING, TYPE_DOUBLE, TYPE_BOOLEAN, TYPE_NULL};
    struct attribute {
    	enum TypeEnum Kind;
    	union {
    		string	(Article::*GetString)();
    		int	(Article::*GetInt)();
    		double	(Article::*GetDouble)();
    		bool	(Article::*GetBoolean)();
    	};
    };
     
    // Liste des getters de la classe Article
    map<string, attribute*>	mAttributes;
    Le problème arrive lorsque je veux appliquer une méthode de la map à un objet du vector.

    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
     
    vector<Article>::iterator iter;
    double sum_double = 0;
     
    switch (mAttributes[attr]->Kind)
    {
    case TYPE_DOUBLE:
    	for( iter = mArticles.begin(); iter != mArticles.end(); iter++ )
    	{
    		double (Article::*fun)() = mAttributes[attr]->GetDouble;
    		sum_double += (iter->* fun)(); // error C2296
    		// iter->GetQuantity(); Fonctionne
    	}
    	return sum_double;
    //...
    }
    // error C2296: '->*' : non conforme, l'opérande gauche est du type 'std::_Vector_iterator<_Ty,_Alloc>'
    Quelqu'un aurait une idée sur le moyen de résoudre ce problème?

    Je me suis mis au c++ depuis pas longtemps donc certaines choses sont encore un peu obscurs pour moi .

    Merci par avance.

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 44
    Par défaut
    Problème résolu.

    Il fallait remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sum_double += (iter->* fun)();
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sum_double += ((*iter).*fun)();

  3. #3
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Merci pour ce retour positif

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/02/2007, 20h30
  2. rappeler un objet dans une autre méthode
    Par yodark dans le forum Langage
    Réponses: 2
    Dernier message: 17/01/2007, 22h08
  3. Réponses: 7
    Dernier message: 22/10/2006, 18h51
  4. [Débutant]vector d'objet
    Par Clark dans le forum SL & STL
    Réponses: 6
    Dernier message: 19/05/2006, 17h56
  5. [JACOB] Comment passer un objet par référence à une méthode
    Par zlavock dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 21/03/2005, 18h28

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