powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с присвоением итератора
4 сообщений из 4, страница 1 из 1
Проблема с присвоением итератора
    #34603662
Тилир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Компилятор Microsoft Visual C++ v8

Минимальный код для воспроизведения проблемы следующий:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
// Сложный контейнер
class vector_of_lists{
private:
  std::vector< std::list<int> > adj;
public:
  // ... Полезные методы

  // Итератор
  class adjIterator;
  friend class adjIterator;
};

// Итератор к нему
class vector_of_lists::adjIterator{
private:
  const vector_of_lists& G;
  int v;
  std::list<int>::iterator list_it; // ( 1 )
public:
  adjIterator(const vector_of_lists& G, int v): G(G), v(v){
    // ... Какая-то работа
  };

  // Первый элемент
  int begin(){
    list_it = G.adj[v].begin(); // ( 2 )
    return *list_it;
  };

  // ... Полезные методы
};

Ошибка C2679 вылетает на строчке (2) на этапе компиляции. Ошибки не вылетает, если на строчке (1) изменить iterator на const_iterator, но мне нужен именно неконстантный итератор.

Я бы ещё поверил, что в листе нет обычного итератора, но например вот такой код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  void testIterator(){
    std::list<int>::iterator ls_iter;
    std::vector< std::list<int> > adj;
    //...
    ls_iter = adj[ 0 ].begin();
    // ...
  }

работает на ура. Почему так можно, а внутри метода класса нельзя?

На всякий случай полный текст ошибки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
2> error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::list<_Ty>::_Const_iterator<_Secure_validation>' (or there is no acceptable conversion)
2>        with
2>        [
2>            _Ty=int,
2>            _Secure_validation=true
2>        ]
2>        c:\program files\microsoft visual studio 8\vc\include\list(421): could be 'std::list<_Ty>::_Iterator<_Secure_validation> &std::list<_Ty>::_Iterator<_Secure_validation>::operator =(const std::list<_Ty>::_Iterator<_Secure_validation> &)'
2>        with
2>        [
2>            _Ty=int,
2>            _Secure_validation=true
2>        ]
2>        while trying to match the argument list '(std::list<_Ty>::_Iterator<_Secure_validation>, std::list<_Ty>::_Const_iterator<_Secure_validation>)'
2>        with
2>        [
2>            _Ty=int,
2>            _Secure_validation=true
2>        ]
...
Рейтинг: 0 / 0
Проблема с присвоением итератора
    #34603702
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тилир wrote:

> const vector_of_lists& G;
вот из-за этого.

вот тут:
>list_it = G.adj[v].begin()
Нельзя получить неконстантный итератор, пока будет слово const в объявлении.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проблема с присвоением итератора
    #34603891
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ErV правельно написал, но добалю пару строк:

То что вам требуется неконстантый итератор нарушает вашу схему. Так как ссылка на переданный объект является константной, предпологается, что класс не будет его как-либо модифицировать. list вам в этом помогает, и поэтому для костантного объекта он возвращает константный итератор. Пересмотрите причины из-за которых установлено const и вы возможно поймете, что компилятор спасает вас от ошибок во времени выполнения программы. Или же const указано не верно.
...
Рейтинг: 0 / 0
Проблема с присвоением итератора
    #34604997
Тилир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ErV,

Спасибо за указание на ошибку. Я почему-то сам этого не заметил, и без вашей помощи наверное долго бы ещё на неё глядел.

Akh,

Проблема действительно была в архитектуре, разрешилась введением дополнительно к итератору const-итератора и разделением их функций.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблема с присвоением итератора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]