簡體   English   中英

如何使用以下模板為地圖聲明迭代器-std :: map <std::string, T> my_map?

[英]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>::printconst成員函數,在其中數據成員_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM