Как вернуть универсальный векторный итератор из метода встроенного шаблона? - PullRequest
1 голос
/ 18 апреля 2019

OK. Как говорится в вопросе, у меня есть метод Inline Template, который возвращает 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 голосов
/ 20 апреля 2019

Фактический ответ на это множество ошибок компилятора - тот, который совершенно не связан с этой конкретной проблемой.

Вы не можете определять шаблонные методы вне файла заголовка

Visual Studio выбросит целую кучу ошибок, уводя вас по кроличьей норе в сторону от относительно простой проблемы, которую нужно исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...