STL set et fonction membre du conteneur
Voici un code qui initialise un conteneur set avec un type class. Le but est de parcourir les éléments du conteneur et d'appeller une fonction membre de la classe à partir de l'iterateur.
Code:
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 34 35 36 37 38 39 40 41 42 43
| #include <set>
class ict{
public:
void print()
{
printf("%d\n",a);
}
void set(int _a)
{
a = _a;
}
private:
int a;
};
int main( int argc, char *argv[])
{
std::set<ict> v;
ict ia;
/* Ajouter 3 objets instance de la classe ict
* avec des valeurs différentes */
ia.set(1);
v.insert(v.end(), ia);
ia.set(2);
v.insert(v.end(), ia);
ia.set(3);
v.insert(v.end(), ia);
std::set<ict>::iterator iter;
for(iter = v.begin(); iter != v.end(); iter++)
{
iter->print();
}
return 0;
} |
Le compilateur n'aime pas ça du tout (G++):
Citation:
set.cpp:35: erreur: passing «const ict» as «this» argument of «void ict::print()» discards qualifiers
PS: Bizarrement (je comprends pas pourquoi) ca fonctionne lorsqu'on utilise <vector>, et pas avec <set>.
Code:
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 34 35 36 37
| #include <vector>
class ict{
public:
void print()
{
printf("%d\n",a);
}
void set(int _a)
{
a = _a;
}
private:
int a;
};
int main( int argc, char *argv[])
{
ict ia;
std::vector<ict> v;
ia.set(1);
v.push_back(ia);
ia.set(2);
v.push_back(ia);
ia.set(3);
v.push_back(ia);
std::vector<ict>::iterator iter;
for(iter = v.begin(); iter != v.end(); iter++)
{
iter->print();
}
return 0;
} |
C'est pourtant la même manière d'accéder à la fonction membre à partir de l'itérateur.