Joh*_*nas 3 c++ iterator stdmap
如何声明迭代器
std::map <T, Point <T> *> ,
Run Code Online (Sandbox Code Playgroud)
哪里:
template <typename T>
struct TList
{
typedef std::vector < std::map <T, Point <T> *> > Type;
};
Run Code Online (Sandbox Code Playgroud)
在以下代码中
int main ()
{
....
std::map <T, Point <T> *> ::iterator i_map; //Error
...
}
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
使用typename如:
typename std::map<T, Point <T> *>::iterator i_map;
//^^^^^^^^ here!
Run Code Online (Sandbox Code Playgroud)
因为iterator是依赖名称(因为它取决于map的类型参数T),所以typename这里需要.
阅读此FAQ以获取详细说明:
我必须在何处以及为何要使用"模板"和"typename"关键字?