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

发布于 2024-11-07 18:02:55 字数 827 浏览 3 评论 0 原文

如何声明迭代器到

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

where:

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

How to declare an iterator to

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

where:

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

In the following code

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

g++ shows this error:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

花期渐远 2024-11-14 18:02:55

使用 typename 作为:

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

因为 iterator 是一个从属名称(因为它取决于映射的 type 参数 T) ,所以这里需要typename

阅读此常见问题解答以获取详细说明:

我必须在哪里以及为什么必须放置“template”和“typename”关键字?

Use typename as:

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

Because iterator is a dependent-name (as it depends on the map's type argument T), so typename is required here.

Read this FAQ for detail explanation:

Where and why do I have to put the "template" and "typename" keywords?

梦里兽 2024-11-14 18:02:55

typename std::map 是否? *> ::iterator i_map; 工作吗?

Does typename std::map <T, Point <T> *> ::iterator i_map; work?

深白境迁sunset 2024-11-14 18:02:55

typename TList::Type::value_type::iterator 怎么样?

What about typename TList<T>::Type::value_type::iterator?

遥远的她 2024-11-14 18:02:55

将“typename”放在错误行之前:std::map ; *> ::迭代器i_map;

示例:

typename vector<T>::iterator vIdx; 

// 根据您的情况: typename std::map *>::iterator i_map;

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

Put "typename" before the line of error : std::map <T, Point <T> *> ::iterator i_map;.

Example:

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文