2010-09-22 143 views
0

我如何返回迭代器形式函数:返回一个迭代器

我试试这个: 。 ..

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_map':不是类或命名空间名称 错误2错误C2146:语法错误:缺少 ';'在标识符'查找'之前 错误3错误C4430:缺少类型说明符 - 假定为int。注意:C++不支持默认 - 错误5错误C2653: 'm_map':不是类或命名空间名称 错误7错误C2133: '游标':未知大小 .. ...

我不“不懂是什么问题..

回答

2

这应该是:

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

3

Find功能应该被定义为:不,你有作为函数的返回类型的一部分‘m_map’

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); 
} 
6

看起来像你想:

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

你应该真的使用的typedef的清理这个东西了:

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; 
}; 
+0

首先评论应该是“我希望你没有把“使用空间std '在标题中。“我希望。 – 2010-09-22 03:23:31

+0

@赞:哈,谢谢。 :) – GManNickG 2010-09-22 05:08:27