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.