![](/img/trans.png)
[英]C++ Iterator declare from typedef std::map as template argument
[英]How do I declare an iterator for a map with the following template - std::map<std::string, T> my_map?
我有以下類聲明-
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();
有人可以告訴我迭代器的正確聲明是什么嗎?
Polynomial<T>::print
是const
成員函數,在其中數據成員_polynomial_
變為const
,這意味着_polynomial_.begin()
返回的是const_iterator
,不能將其隱式轉換為iterator
。 (請注意, const
版本和非const
版本都重載了std::map::begin
,前者返回const_iterator
,而后者返回iterator
。)
將代碼更改為
typename std::map<std::string, T>::const_iterator it = _polynomial_.begin();
// ^^^^^^
或改用auto
,它會為您推斷出正確的類型。
auto it = _polynomial_.begin();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.