如何返回Iterator - 列表<t> :: iterator,作为函数返回值</t>

时间:2013-05-18 17:13:22

标签: c++ iterator adt typedef typename

我正在实现一个抽象的哈希表容器。我的find()函数已正确定义并正常工作,如下所示:

template <class HashedObj>
HashedObj& HashTable<HashedObj>::find(const HashedObj &x){
    typename list<HashedObj>::iterator itr;
    itr = std::find(theList[hash(x)].begin(), theList[hash(x)].end(), x);
    if(itr == theList[hash(x)].end())
        return ITEM_NOT_FOUND;
    else
        return *itr;
} 

但是,我想定义另一个名为findAddress()的函数,该函数返回itr(迭代器)而不是*itr。我的代码是:

typedef list<HashedObj>::iterator iterator;
template <class HashedObj>
iterator HashTable<HashedObj>::find(const HashedObj &x){
    return std::find(theList[hash(x)].begin(), theList[hash(x)].end(), x);
} 

以上会抱怨:

type std::list<HashedObj, std::allocator<_CharT> > is not derived from type
  HashedTable<HashedObj>.

基本上我想返回之前由std定义的迭代器类型。

1 个答案:

答案 0 :(得分:0)

我不是专家,但两个函数在给定的代码中具有相同的名称,同时接受相同的参数。这是正常的吗?另外,我假设您的意思是“称为findAddress()的函数”而不是“名为findAddress()的类”。