簡體   English   中英

C ++,std :: map的迭代器

[英]C++, iterator to std::map

如何聲明迭代器

std::map <T, Point <T> *> ,

哪里:

template <typename T>
struct TList
{
    typedef std::vector < std::map <T, Point <T> *> >  Type;
};

在以下代碼中

int main ()
{
    ....
    std::map <T, Point <T> *> ::iterator i_map;  //Error
    ...
}

g ++顯示此錯誤:

error: dependent-name `  std::map<T,Point<T>*,std::less<_Key>,std::allocator<std::pair<const T, Point<T>*> > >::iterator' is parsed as a non-type, but instantiation yields a type
note: say `typename  std::map<T,Point<T>*,std::less<_Key>,std::allocator<std::pair<const T, Point<T>*> > >::iterator' if a type is meant

使用typename為:

  typename std::map<T, Point <T> *>::iterator i_map;
//^^^^^^^^ here!

因為iterator是一個依賴名稱(因為它取決於map的類型參數T ),所以這里需要typename

閱讀此FAQ以獲取詳細說明:

我必須在何處以及為何要使用“模板”和“typename”關鍵字?

將“ typename ”放在錯誤行之前: std::map <T, Point <T> *> ::iterator i_map;

例:

typename vector<T>::iterator vIdx; 

// On your case : typename std::map <T, Point<T>*>::iterator i_map;

vIdx= find(oVector->begin(), oVector->end(), pElementToFind); //To my case

typename std::map <T, Point <T> *> ::iterator i_map; 工作?

那么typename TList<T>::Type::value_type::iterator呢?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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