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.
Je stocke l'ensemble des articles dans un vector 'mArticles':
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 };
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 vector<Article> mArticles;
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 // 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;
Quelqu'un aurait une idée sur le moyen de résoudre ce problème?
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>'
Je me suis mis au c++ depuis pas longtemps donc certaines choses sont encore un peu obscurs pour moi.
Merci par avance.
Partager