W moim pliku nagłówkowym umieściłem std :: map i używam odpowiedniej przestrzeni nazw.
Jeden z moich członków jest:Błąd kompilacji przy użyciu iteratorów map
map<unsigned int, double> pT_Spam;
A w moim pliku .cpp staram się zrobić coś, co robiłem często już od jakiegoś czasu:
for(map<unsigned int, double>::iterator it=pT_Spam.begin() ; it!=pT_Spam.end() ; it++) {/*code*/}
Powyższe jest nawet wspomniane w jeden z przykładów użycia std :: map na cplusplus.com. Mimo, że zrobili bardzo podobnie w innych częściach kodu, które nie powodują błędy kompilacji, w tej konkretnej linii pojawia się następujący błąd z 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
co wydaje się dość dziwne. Masz pojęcie, co może być nie tak? (Mój nagłówek jest oczywiście wliczone w .cpp)
Narzeka, że iterator zwrócony przez funkcję begin() to const_iterator, ale przypisujesz go do iteratora. Ale nie jestem pewien dlaczego, to też wygląda na mnie. Jaki to kompilator? – Joe
[begin()] (http://cplusplus.com/reference/stl/map/begin/) wydaje się być zdolny do zwracania także iteratorów niestanowiących stałych. Używam g ++ cygwin w systemie Windows. – jathanasiou