Comment créer une fonction avec le type de retour de la carte<>?
Question assez simple. J'ai une carte que je souhaite initialiser par l'appel d'une fonction comme ceci:
map<string, int> myMap;
myMap = initMap( &myMap );
map<string, int> initMap( map<string, int> *theMap )
{
/* do stuff... */
Cependant, le compilateur en gémissant. Quelle est la solution?
EDIT 1:
Je suis désolé, mais j'ai foiré. Le code a été correctement écrit avec *theMap
, mais quand j'ai posté la question, j'ai manqué de remarquer que j'avais omis le *
. Donc, pour répondre à un commentaire, le message d'erreur que je reçois est:
1>Roman_Numerals.cpp(21): error C2143: syntax error : missing ';' before '<'
qui est jeté à
map<char, int> initMap( map<char, int> *numerals );
à l'aide de VC++ 2010 Express et le même message d'erreur quand je définir la fonction.
OriginalL'auteur IAE | 2010-06-04
Vous devez vous connecter pour publier un commentaire.
Faire de
ou faire:
c'est à dire laisser la fonction d'initialisation de la carte vous le donner, ou prendre la carte la fonction vous donne. Vous êtes en train de faire à la fois (sans
return
déclaration de trop!)J'irais pour la première option.
OriginalL'auteur jilles de wit
C'est probablement de se plaindre parce que vous êtes en passant l'adresse de la carte, mais votre fonction accepte la carte en valeur.
Vous pourriez voulez quelque chose de plus comme ceci:
OriginalL'auteur Fred Larson
Vous devez accepter un pointeur ou, de préférence, une référence à la carte. Vous pouvez également renvoyer une référence pour plus de commodité:
OriginalL'auteur AraK
La solution canonique est juste
Pourquoi la difficile tentative d'utilisation d'un paramètre d'entrée pour une valeur de retour? La Performance? Les compilateurs modernes n'avez pas de soins. En fait, pas la construction d'une carte vide sera un peu plus rapide.
OriginalL'auteur MSalters
pourquoi ne pas le faire annuler initMap(carte,& theMap), au lieu de faire autant d'exemplaires de la carte?
OriginalL'auteur Chris Card
&myMap
est un pointeur vers un élément de la carte, tandis que l'argumenttheMap
est un élément de la carte.Deux solutions:
Changement
myMap = initMap( &myMap );
àmyMap = initMap( myMap );
.ou
Changement
map<string, int> initMap( map<string, int> theMap )
àmap<string, int> initMap( map<string, int> * theMap )
.OriginalL'auteur metaliving
Un peu en retard pour le jeu, mais:
Je suppose que le message d'erreur que vous êtes absent dehors
en haut de votre code. Ainsi, le compilateur ne sait pas que la carte est censé être un modèle, et par conséquent, il devient confus par des crochets qui suivent.
OriginalL'auteur MTGradwell
vous êtes de passage à une référence de la carte à la fonction init.
Ni est la valeur de retour correspond à une
map<K,T>
que ce que l'OP demande. Ne postez pas de charabia des choses, s'il vous plaît.OriginalL'auteur Vedang Joshi