返回一个迭代器

时间:2010-09-22 01:01:25

标签: c++ iterator

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

我很喜欢这个: 。 ..

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:'iterator':未知大小 .. ...

我不明白是什么问题..

3 个答案:

答案 0 :(得分: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;
};

答案 1 :(得分:3)

您的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;
}

没有作为函数返回类型一部分的“m_map”。

编辑:实际上,没有必要创建临时itMap迭代器;您可以直接返回find的结果。另外,我认为KeyToUpDate应该是keyToFind。进行这些修改后,您最终会得到:

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

答案 2 :(得分: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