Ошибка типа конверсии при цепочке - PullRequest
1 голос
/ 27 марта 2019

Я заблудился в этом фрагменте кода C ++, который включает в себя итерации по списку, содержащемуся в структуре RouteInfo. Почему код показывает эту ошибку компиляции: Severity Code Description Project File Line Suppression State Error (active) E0312 no suitable user-defined conversion from "std::_List_const_iterator<std::_List_val<std::conditional_t<true, std::_List_simple_types<int>, std::_List_iter_types<int, size_t, ptrdiff_t, int *, const int *, int &, const int &, std::_List_node<int, void *> *>>>>" to "std::_List_iterator<std::_List_val<std::conditional_t<true, std::_List_simple_types<int>, std::_List_iter_types<int, size_t, ptrdiff_t, int *, const int *, int &, const int &, std::_List_node<int, void *> *>>>>" ...

Код проблемы

void iterateOverListInStruct(std::multimap<RouteInfo, int> aMap)
{
    std::multimap<RouteInfo, int /* vehicle id */>::iterator it = aMap.begin();
    for (; it != aMap.end(); it++)
    {
        std::list<int>::iterator itr = it->first.secList.begin();
    }
}

а этот код не показывает ошибок компилятора?

void iterateOverListInStruct(std::multimap<RouteInfo, int> aMap)
{
    std::multimap<RouteInfo, int /* vehicle id */>::iterator it = aMap.begin();
    for (; it != aMap.end(); it++)
    {
        std::list<int> list = it->first.secList;
        std::list<int>::iteartor itr = list.begin();
    }
}

Вот класс RouteInfo:

class RouteInfo{
    public:
        list<int>secList;}

1 Ответ

3 голосов
/ 27 марта 2019

value_type из std::multimap равно std::pair<const Key, T>, поэтому it->first.secList равно const std::list<int>, и begin() на нем возвращает std::list<int>::const_iterator

Ваш второй пример копирует его в новый неконстантный std::list<int>, а тип итератора, возвращаемый begin(), равен std::list<int>::iterator

Чтобы исправить ошибку, измените itr введите std::list<int>::const_iterator

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