代码之家  ›  专栏  ›  技术社区  ›  Aviadjo

返回迭代器

  •  0
  • Aviadjo  · 技术社区  · 14 年前

    如何返回迭代器窗体函数:

    我想说: . ..

    template<class S,class T> class Database {
    public:
    .
    ..
     map<S,Node<T>*> m_map::iterator Find (S keyToFind);
    .
    ..
    ....
    
    
    private:
    .
    ..
     map<S,Node<T>*> m_map;
    ..
    .
    };
    
    .
    ..
    template<class S,class T>
    map<S,Node<T>*> m_map::iterator Find (S keyToFind) {
     map<S,Node<T>*>::iterator itMap;
     itMap = m_map.find(KeyToUpDate);
     return itMap;
    }
    ..
    .
    

    有许多错误是因为: 错误1错误C2653:“m\u map”:不是类或命名空间名称 错误2错误C2146:语法错误:标识符“Find”前缺少“;” 错误5错误C2653:“m\u map”:不是类或命名空间名称 错误7错误C2133:“迭代器”:未知大小 ..

    我不明白有什么问题。。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Georg Fritzsche    14 年前

    这应该是:

    template<class S,class T>
    typename map<S,Node<T>*>::iterator Find(S keyToFind) {
        typename map<S,Node<T>*>::iterator itMap;
        itMap = m_map.find(KeyToUpDate);
        return itMap;
    }
    

    typename map<S,Node<T>*>::iterator Find (S keyToFind);
    

    typename iterator 是依赖类型,请参见例如。 here .

        2
  •  6
  •   GManNickG    14 年前

    typename map<S,Node<T>*>::iterator
    

    真正地

    template<class S, class T>
    class Database
    {
    public:
        // I hope you have't put `using namespace std;` in a header...
        typedef std::map<S, Node<T>*> map_type;
        typedef typename map_type::iterator iterator;
        // etc...
    
        // use references to avoid copying
        iterator Find (const S& keyToFind);
    private:
        map_type m_map;
    };
    
        3
  •  3
  •   Josh Townzen    14 年前

    你的 Find

    template<class S,class T>
    typename map<S,Node<T>*>::iterator Find (S keyToFind) {
        map<S,Node<T>*>::iterator itMap;
        itMap = m_map.find(KeyToUpDate);
        return itMap;
    }
    

    编辑: 但实际上,没有必要创建临时 itMap 迭代器;您可以返回 find 直接。而且,我认为 KeyToUpDate keyToFind . 进行这些修改后,您将得到:

    template<class S,class T>
    typename map<S,Node<T>*>::iterator Find (S keyToFind) {
        return m_map.find(keyToFind);
    }