У меня есть следующее объявление класса -
template <typename T>
class Polynomial{
std::map<std::string, T> _polynomial_
}
В функции-члене я объявил итератор для этого -
typename std::map<std::string, T>::iterator it= _polynomial_.begin();
Завершенная функция-член выглядит так -
template <typename T>
void Polynomial<T>::print(std::ostream& out) const
{
typename std::map<std::string, T>::iterator it= _polynomial_.begin();
std::string term;
while(it != _polynomial_.end()){
term = it->second;
term += it->first;
if(it->first < (T)0){
out << "-" << term;
}
else{
out << "+" << term;
}
term = "";
it++;
}
}
В основном я вызываю функцию следующим образом -
Polynomial <double> p1;
p1.add_term("x0",9.862);
std::cout << p1;
Однако, похоже, это не работает, и я получаю ошибки. GCC жалуется на
ошибка преобразования -
Polynomial.hpp: 32: 47: ошибка: преобразование из \ u2018std :: map, double, std :: less>, std :: allocator, double>>> :: const_iterator {aka std :: _ Rb_tree_const_iterator, double> >} \ u2019 в нескалярный тип \ u2018std :: map, double, std :: less>, std :: allocator, double>>> :: iterator {aka std :: _ Rb_tree_iterator, double>>} \ u2019 запрошен
имя типа std :: map :: iterator it = полином .begin ();
Может кто-нибудь сказать мне, как правильно объявить итератор?