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

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)

Naw*_*waz 5

使用typename如:

  typename std::map<T, Point <T> *>::iterator i_map;
//^^^^^^^^ here!
Run Code Online (Sandbox Code Playgroud)

因为iterator是依赖名称(因为它取决于map的类型参数T),所以typename这里需要.

阅读此FAQ以获取详细说明:

我必须在何处以及为何要使用"模板"和"typename"关键字?