2015-10-14 1 views
1

Dire que j'ai quelquesaide iterator pour imprimer un multimap

typedef std::pair<userObject*,char> Bar; 
    std::multimap<int, Bar > Foo; 
    std::multimap<int, Bar >::iterator it = foo.begin(); 

J'ai inséré quelques membres dans la carte et je veux itérer sur son contenu en utilisant l'itérateur. Cependant, la tentative du deuxième code de ligne donne un no viable conversion from....

Je sais que l'erreur est causée par Bar étant une paire. J'ai écrit une classe simple en utilisant ints pour simuler le comportement et tout fonctionne comme prévu. Dois-je fournir un modèle de classe T? pour définir le comportement.

Voici a link au code source pour voir le code.

Message d'erreur est

no viable conversion from '__map_iterator<__tree_iterator<__value_type<int *, [...]>, std::__1::__tree_node<std::__1::__value_type<int *, std::__1::pair<Vertex *, char> >, void *> *, [...]>>' to '__map_iterator<__tree_iterator<__value_type<int, [...]>, std::__1::__tree_node<std::__1::__value_type<int, std::__1::pair<Vertex *, char> >, void *> *, [...]>>' 
+1

'foo.begin' (pas parethesis) - est une faute de frappe ou un code réel? – SergeyA

+0

C'était en fait une faute de frappe, merci! – Dev

+0

Veuillez préparer un [MCVE] (http://stackoverflow.com/help/mcve). L'exemple de code que vous avez posté ici se compile bien, à condition que vous changiez 'Foo' en' foo', ce qui est juste une faute de frappe. Le code sur Github n'est pas complet et nous ne pouvons pas le compiler. –

Répondre

1

Ceci est beacuse pas une paire. C'est parce que vous n'appelez pas la fonction foo.begin, mais que vous essayez plutôt de l'accéder directement.

Le code approprié est std::multimap<int, Bar >::iterator it = foo.begin();

+0

Le code correct est 'auto it = std :: begin (foo);' –

+0

@ LightnessRacesinOrbit, en désaccord complet. Il n'y a pas besoin d'utiliser auto dans cet exemple. – SergeyA

+0

il n'y a probablement jamais de "besoin" pour 'auto'. Mais peu importe, concentrez-vous sur la valeur, c'est le point de vue de LRIO. –