Возвращение итератора из функции вызывает у меня странную ошибку

0

Поэтому у меня есть класс с именем Client и он содержит список строк. Я хочу, чтобы метод получил итератор в начале, а другой в конце. Поэтому у меня есть следующий код:

iterator Client::getGustBegin() const { return _gustos.begin(); }
iterator Client::getGustEnd() const { return _gustos.end(); }

И в Client.h это выглядит так:

    iterator getGustBegin() const;
    iterator getGustEnd() const;

Также _gustos объявляется следующим образом:

list<string> _gustos;

Я использую компилятор g++, и он показывает мне эту ошибку:

error: invalid use of template-name 'std::iterator' without an argument list

В обеих строках в Client.h. У меня есть карта и список. Я не знаю, почему, и я не понимаю ошибку. Что я делаю не так?

  • 0
    Скажем, итератор из std::vector<int> не обязательно должен быть связан с std::iterator . Кроме того, std::iterator является шаблоном класса , аналогичным std::vector , который требует использования аргументов шаблона для создания экземпляра фактического типа из шаблона.
  • 0
    std :: iterator является шаблоном. Вам необходимо предоставить аргументы для шаблона: cplusplus.com/reference/iterator/iterator
Показать ещё 3 комментария
Теги:
iterator
stl

1 ответ

1
Лучший ответ

Обычно typedef - хорошая вещь:

class Client
{
   public:
   typedef std::list<std::string>::iterator gust_iterator;
   gust_iterator getGustBegin() const;
};


inline Client::gust_iterator Client::getGustBegin() const {
   return _gustos.begin();
}

В вашем случае (как уже указывалось) итератор ссылается на std :: iterator. (Следовательно, вы дали другой пример, чтобы избежать использования nmaespace std)

  • 0
    Вы уверены, что это скомпилируется с неконстантным итератором в константной функции-члене?
  • 0
    Вот и все, адаптированный к моему коду, но спасибо, это помогло мне решить проблему!
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню