链接方法时出现转换类型错误

Conversion type error when chaining method

本文关键字:转换 类型 错误 方法 链接      更新时间:2023-10-16

我对这段涉及迭代结构RouteInfo中包含的列表的 c++ 代码迷失了方向。代码怎么会出现这个编译错误: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;}

std::multimapvalue_typestd::pair<const Key, T>,所以it->first.secListconst std::list<int>的,begin()返回std::list<int>::const_iterator

您的第二个示例将其复制到新的非常量std::list<int>中,然后begin()返回的迭代器类型std::list<int>::iterator

要修复错误,请将itr类型更改为std::list<int>::const_iterator