C++,std::map 的迭代器
如何声明迭代器到
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
使用
typename
作为:因为
iterator
是一个从属名称(因为它取决于映射的 type 参数T
) ,所以这里需要typename
。阅读此常见问题解答以获取详细说明:
我必须在哪里以及为什么必须放置“template”和“typename”关键字?
Use
typename
as:Because
iterator
is a dependent-name (as it depends on the map's type argumentT
), sotypename
is required here.Read this FAQ for detail explanation:
Where and why do I have to put the "template" and "typename" keywords?
typename std::map 是否? *> ::iterator i_map;
工作吗?Does
typename std::map <T, Point <T> *> ::iterator i_map;
work?typename TList::Type::value_type::iterator
怎么样?What about
typename TList<T>::Type::value_type::iterator
?将“
typename
”放在错误行之前:std::map; *> ::迭代器i_map;
。示例:
// 根据您的情况: typename std::map*>::iterator i_map;
Put "
typename
" before the line of error :std::map <T, Point <T> *> ::iterator i_map;
.Example:
// On your case : typename std::map <T, Point<T>*>::iterator i_map;