Comment inclure un conteneur dans une classe

Résolu
cs_kharrat Messages postés 71 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 29 mars 2007 - 31 juil. 2005 à 23:46
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009 - 1 août 2005 à 20:04
Salut,

Je cherche désespérément à créer une classe qui a un conteneur map pour faire un carnet d'adresse (je m'amuse comme je peux...) en C++.
Le compilateur me dit que le map n'est pas un type de base pour ma classe.

Je n'ai encore jamais rencontré d'exemple de classe qui a un conteneur et je commence à me demander si la chose est possible.

1. Est-il possible de déclarer un conteneur comme membre d'une classe ?
2. Si oui, comment procéder en C++ ?
3. La chose est-elle possible dans un autre langage que C++ (C#, Java...)

Merci

7 réponses

vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
1 août 2005 à 08:44
Un conteneur c'est comme n'importe quelle classe, rien de spécial à faire. Il faut juste inclure <map>, et bien sur ne pas oublier d'utiliser std:

#include <map>
using namespace std;

class usingMap
{
map m;
};
3
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
1 août 2005 à 08:53
Pour plus d'info sur la STL et les conteneurs std de C++ :
http://www.sgi.com/tech/stl/

Cordialement,
Xterminhate.
3
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
1 août 2005 à 13:00
le type exact de ton itérateur est le suivant :

map<string,FichePerso>::iterator im;

ou

map<string,FichePerso>::const_iterator im;

Je t'invite à regarder de plus pres ce qu'est un opérateur de resolution de portée (ie, ':').

Cordialement,
Xterminhate.
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 12
1 août 2005 à 19:30
l'opérateur de resolution de portée n'est pas : mais ::
map<string,FichePerso>::iterator signifie en fait que iterator est une classe déclarée à l'intérieur de map
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
xterminhate Messages postés 371 Date d'inscription dimanche 4 janvier 2004 Statut Membre Dernière intervention 23 septembre 2009
1 août 2005 à 20:04
Le lecteur aura corrigé de lui même, mais merci de préciser au cas où. Attention, cet opérateur ne se limite pas au cas particulier que tu mentionnes (il s'applique au namespace, aux blocs, à l'encapsulation, etc...).

Cordialement,
Xterminhate.
3
cs_kharrat Messages postés 71 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 29 mars 2007
1 août 2005 à 12:49
Salut,

Merci d'avoir répondu à mon message !

J'y vois un peu plus clair : le compilateur renvoyait une erreur, non pas sur la déclaration du map, mais sur la déclaration d'un itérateur, comme suit :

#include "FichePerso.h"
#include <map>
using namespace std ;


class Carnet
{
map <string, FichePerso> carnet ;
map <string, FichePerso> ::im ; // erreur de compilation

public :
Carnet () ;
Carnet (const Carnet &) ;
~Carnet () ;
} ;

Eventuellement, je suis preneur si quelqu'un peu m'expliquer : pourquoi l'itérateur ne peux pas être déclaré comme membre de la classe ? (même si celà me semble assez logique, malgré tout).

@++ et encore merci pour vos tuyaux
0
cs_kharrat Messages postés 71 Date d'inscription mercredi 15 novembre 2000 Statut Membre Dernière intervention 29 mars 2007
1 août 2005 à 13:05
invitation acceptée !

merci pour votre aide,
kharrat
0