Nel mio file di intestazione ho incluso la std :: map e uso lo spazio dei nomi appropriato.
Uno dei miei soci è:Errore di compilazione tramite iteratori di mappe
map<unsigned int, double> pT_Spam;
E nel mio file cpp tento di fare qualcosa che ho fatto spesso da qualche tempo:
for(map<unsigned int, double>::iterator it=pT_Spam.begin() ; it!=pT_Spam.end() ; it++) {/*code*/}
Quanto sopra è anche menzionata in uno gli esempi di utilizzo di std :: map su cplusplus.com. Anche se ho fatto praticamente lo stesso in altre parti del codice che causano errori di compilazione, in questa particolare linea ottengo il seguente errore da Cygwin:
error: conversion from `std::_Rb_tree_const_iterator<std::pair<const unsigned int, double> >' to non-scalar type `std::_Rb_tree_iterator<std::pair<const unsigned int, double> >' requested
Che sembra piuttosto strano. Qualche idea di cosa potrebbe essere sbagliato? (La mia intestazione è, ovviamente, inclusa nel mio cpp)
Si sta lamentando che l'iteratore restituito da begin() è un const_iterator, ma lo si sta assegnando a un iteratore. Ma non sono sicuro del perché, anche questo mi sembra giusto. Che compilatore è questo? – Joe
[begin()] (http://cplusplus.com/reference/stl/map/begin/) sembra essere in grado di restituire anche iteratori non const. Uso il g ++ di Cygwin su Windows. – jathanasiou