Comment inclure un conteneur dans une classe

Résolu
Signaler
Messages postés
71
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
29 mars 2007
-
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009
-
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

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
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;
};
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009

Pour plus d'info sur la STL et les conteneurs std de C++ :
http://www.sgi.com/tech/stl/

Cordialement,
Xterminhate.
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009

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.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
10
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
Messages postés
371
Date d'inscription
dimanche 4 janvier 2004
Statut
Membre
Dernière intervention
23 septembre 2009

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.
Messages postés
71
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
29 mars 2007

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
Messages postés
71
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
29 mars 2007

invitation acceptée !

merci pour votre aide,
kharrat