如何从成员函数返回迭代器?

her*_*ian -3 c++ stl

可能重复:
我必须在何处以及为何要使用"template"和"typename"关键字?

我有一个类似下面的模板类

  template <class Key, class Object>
  class  TObjectRegistery
  {
  public:
     typedef map<const Key,  Object*> ObjectMap;

     void AddObject(Object *obj){
        objectMap_[obj.code()] = obj;
     }
  private:
     ObjectMap  objectMap_;
     }
Run Code Online (Sandbox Code Playgroud)

我想在外面运行迭代TFactory,然后我想在类中添加两个成员函数.

  ObjectMap::iterator xbegin(){
     return objectMap_.begin();
  }
Run Code Online (Sandbox Code Playgroud)

但是我得到了一个我错过的错误; 在xbegin之前,像undefine ObjectMap :: iterator

  "missing ';' before identifier 'xbegin'"
Run Code Online (Sandbox Code Playgroud)

为什么会这样?我该怎么办呢?如果这种好方法可以在课外进行迭代?

小智 5

在ObjectMap之前还需要typename关键字,因为它是模板参数的派生类型:

typename ObjectMap::iterator xbegin(){
    return objectMap_.begin();
}
Run Code Online (Sandbox Code Playgroud)