Поэтому у меня есть класс с именем 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. У меня есть карта и список. Я не знаю, почему, и я не понимаю ошибку. Что я делаю не так?
Обычно 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)
std::vector<int>
не обязательно должен быть связан сstd::iterator
. Кроме того,std::iterator
является шаблоном класса , аналогичнымstd::vector
, который требует использования аргументов шаблона для создания экземпляра фактического типа из шаблона.