我创建了一对和长long int的地图 -
map< pair< long long int, long long int >,long long int >;
和一个交互者 -
map< pair< long long int, long long int >, long long int >::iterator it1;
当我做it1=same.begin()
编译器抛出错误时,为什么会这样?
生成错误:
no viable overloaded '='
it1=same12.begin();
~~~^~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin /../包括/ C ++ / V1 /地图:648:29: 注意:候选功能 (隐式复制赋值运算符)不可行:没有已知的转换 &#39; __ map_iterator&lt; __ tree_iterator&lt; __ value_type,[...]&gt;,_ _ node_pointer,[...]&gt;&gt;&#39;到&#39; const __map_iterator&lt; __ tree_iterator&lt; __ value_type,[...]&gt;, std :: __ 1 :: __ tree_node,long long&gt;,void *&gt; *,[...]&gt;&gt;&#39;第一个论点 class _LIBCPP_TYPE_VIS_ONLY __map_iterator
答案 0 :(得分:3)
错误告诉您:
没有已知从
的转换'__map_iterator<...>'
转换为'const __map_iterator<_...>'
注意const
。
此处看起来same12
是const map
(或const map&
,或者它可能在const
方法中使用,在这种情况下,const-correctness正在施加)。这意味着.begin()
will return const_iterator
,而不是iterator
。
您需要将it1
的类型更改为const_iterator
而不是iterator
。完整类型应为:map<pair<long long int, long long int>, long long int>::const_iterator
。
或者只使用auto it1 = same12.begin();
。