如何从内联模板方法返回通用向量迭代器?

时间:2019-04-18 17:12:28

标签: c++ generics vector iterator return-type

好。正如问题所述,我有一个内联模板方法,该方法将Iterator返回到通用向量。

注意:我知道我应该将实现更改为std :: find,但这不是我面临的问题。

#include <vector>

template<typename T>
class List : public std::vector<T>
{
public:
    List();
    ~List();

    bool Contains(T object);

    void Remove(const T& object);

private:
    typedef typename std::vector<T>::iterator iterator;

    typename std::vector<T>::iterator IteratorOf(const T& object);
};


template<typename T>
inline typename std::vector<T>::iterator List<T>::IteratorOf(const T& 
object)
{
    if (this->empty())
        return nullptr;
    else
    {
        for (typename std::vector<T*>::iterator iter = this->begin();
          iter != this->end();                                       
          iter++)
        {
        if (*object == *iter)
            return iter;
        }
    }
    return nullptr;
}

当我尝试运行它时,会引发无数的编译器错误。

我似乎已经尝试了所有方法,但是根本不喜欢这种方法。

开始怀疑返回通用迭代器是否存在问题。

1 个答案:

答案 0 :(得分:-1)

对众多编译器错误的实际答案是与该特定问题完全无关的。

您不能在头文件之外定义模板化方法

Visual Studio会抛出整个HEAP错误,使您摆脱了一个相对容易解决的难题。