我有以下类声明-
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++;
}
}
在 main 中,我调用函数如下 -
Polynomial <double> p1;
p1.add_term("x0",9.862);
std::cout << p1;
但是这似乎不起作用并且我收到错误。海湾合作委员会提示 转换错误 -
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 请求 typename std::map::iterator it= 多项式.begin();
谁能告诉我迭代器的正确声明是什么?
最佳答案
Polynomial<T>::print
是 const
成员函数,其中数据成员_polynomial_
变成 const
同样,这意味着什么 _polynomial_.begin()
返回是 const_iterator
, 无法转换为 iterator
含蓄地。 (注意 std::map::begin
重载了 const
版本和非 const
版本,前者返回 const_iterator
后者返回 iterator
。)
将代码改为
typename std::map<std::string, T>::const_iterator it = _polynomial_.begin();
// ^^^^^^
或使用 auto
相反,它会为您推断出正确的类型。
auto it = _polynomial_.begin();
关于c++ - 如何使用以下模板为 map 声明迭代器 - std::map<std::string, T> my_map?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53147471/