Не могу напрямую вывести значения итератора STL Vector - PullRequest
0 голосов
/ 29 января 2012

У меня проблема при попытке вывести значения итераторов STL в C ++. Следующий код генерирует ошибку - независимо от того, какую цель шаблона я собираюсь использовать:

template <typename T>
void outputVector(vector<T> &v)
{
    typename vector<T>::const_iterator iter;
    for(iter = v.begin(); iter != v.end(); iter++)
    {
        cout << *iter << endl;
    }

Сообщение

нет совпадения для 'operator <<' в 'std :: cout << iter .__ gnu_cxx :: __ normal_iterator <_Iterator, _Container> :: operator * с _Iterator = const Node *, _Container = std :: vector>'

При замене цикла for на

for(iter = v.begin(); iter != v.end(); iter++)
{
    T t = *iter;
    cout << t << endl;
}

все работает просто отлично.

Есть ли у вас проблемы, в чем проблема? Используемый класс "Node" перегружает оператор "<<" на </p>

ostream & operator<<(ostream &o, Node &n)
{
o << "Hello World" << endl;
return o;
}

1 Ответ

4 голосов
/ 29 января 2012

Ваш operator<< не может получить ссылку на const для второго аргумента:

std::ostream& operator<<(std::ostream& os, MyType& obj);

Это означает, что временный *iter не может привязаться к этому аргументу.


Привычка использовать const в любом месте, где вам не нужно изменять объект:

std::ostream& operator<<(std::ostream& os, MyType const& obj);

Теперь аргумент ссылки может связываться с временным.Huzzah!


Это удачное предположение, принесенное вам синим цветом и числом 42.

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