Comment utiliser de maps STL avec des objets

tony0093 Messages postés 10 Date d'inscription mardi 17 janvier 2006 Statut Membre Dernière intervention 21 juin 2008 - 21 juin 2008 à 12:37
tony0093 Messages postés 10 Date d'inscription mardi 17 janvier 2006 Statut Membre Dernière intervention 21 juin 2008 - 21 juin 2008 à 17:01
Bonjour à tous, dans le cas d'un projet de moteur de bdd en C++, je dois en fait recréer un moteur type Mysql mais en C++, j'ai donc plusieurs classes qui contiennent chacune un conteneurs ,
voici mes classes:

- la classe Base qui contient un conteneur maptables
- la classe Table qui contient un conteneur mapchamps
- la classe Champ qui contient un conteneur mapdata
- la classe Data

et mon porblème est de savoir si cette structure est bonne car je n'arrive pas à implémenter mes maps cad mettre des objets de types Classe dans mes maps et les récupérer.
j'arrive à les ajouter en faisant un truc comme ça mapTables[int]=monObjetTypeTable dans une fonction addTable()
mais, ensuite pour récupérer les infos de mon objet(enregistré dans la map), je crée un iterator sur la map mapTables et je parcoure tous les éléments de la map, j'affiche j'essaye de récupérer la valeur indexée avec:
    for( it = mapTables.begin(); it != mapTables.end(); it++ ) {
            Table Tab = (*it).second;
            cout<< it->first <<" - "<<Tab.getTableNom()<<endl;
       }
ça m'affiche rien du tout, je comprend pas, est-ce que il y a quelque chose que j'ai mal cerné, ou avez vous des exemples d'utilisation des conteneurs STL qui pourrait correspondre à ce que je cherche à faire?

Je dois ensuite enregistrer dans des fichiers et charger mes conteneurs en lisant les fichiers.( j'ai une très vague idée de la façon de faire dailleurs )

Je suis newbe en C++ je galère énormément alors que c'est pas la motivation qui manque, juste besoin d'une grosse aide que je viens chercher sur ce forum

Voilà, en éspérant que vous avez cerné mon pb et que vous aurez envie de m'aider

merci

2 réponses

luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
21 juin 2008 à 14:11
Hm, faut faire attention à ce que tu écris:
"Table Tab = (*it).second;"

Tu as une idée de ce qu'il se passe ici ? L'opérateur d'affectation "=" est appelé pour copier ton objet. Donc dans le meilleur des cas, ca n'est catastrophique que pour les performances et le pire des cas, c'est si ton objet n'est pas copiable. Donc si ca fait pas ce que tu veux, c'est peut etre que ca copie d'objet est incorrecte.

Faut soit utiliser un pointeur, soit une référence, soit rien du tout ! pour éviter la copie d'objet.

1)
Table * Tab = & it->second;
cout<< it->first <<" - "<<Tab->getTableNom()<<endl;

2)

Table & Tab = it->second;

cout<< it->first <<" - "<<Tab.getTableNom()<<endl;

3)

cout<< it->first <<" - "<second.getTableNom()<<endl;

Et je vais me répéter mais, un débuggeur a ton avis, ca sert a quoi ?
0
tony0093 Messages postés 10 Date d'inscription mardi 17 janvier 2006 Statut Membre Dernière intervention 21 juin 2008
21 juin 2008 à 17:01
Merci luthor, j'avais déjà essayé plusieurs solutions dont celles que tu as mentionné mais ça ne tourne tjrs pas, à cause d'autre chose très certainement, donc j'ai pris des vector car j'ai pas trop le temps de me prendre la tête...
merci quand même d'avoir pris le temps de m'aider
0
Rejoignez-nous