我创建了一个包含两个变量的struct
类型。我在vector
中使用此数据类型,该数据类型再次存储在map
中,如下所示:
struct A {
int x;
Y y;
A() {};
A(int _x, Y _y) { x=_x, y=_y; };
};
typedef std::vector<A> LA;
typedef std::map<uint,LA> MB;
MB b;
当我尝试使用迭代器时,例如
std::vector<LA>::iterator it = b[x].begin();
编译器给出了这个错误:
错误:没有可行的转换来自&#39; __ wrap_iter&lt; A *&gt;&#39;至 &#39; __ wrap_iter&LT; std :: __ 1 :: vector&lt; A,std :: __ 1 :: allocator&lt; A&GT; &GT; * GT;&#39; 的std ::矢量&lt; LA&gt; :: iterator it = b [x] .begin();
候选构造函数(隐式复制构造函数)不可行:没有来自&#39; iterator&#39; (aka&#39; __ wrap_iter&lt; pointer&gt;&#39;)到&#39; const std :: __ 1 :: __ wrap_iter&lt;的std :: __ 1 ::矢量&lt; A,&gt;的std :: __ 1 ::分配器&LT; A&GT; &GT; * GT; &安培;&#39;对于第一个参数class__wrap_iter
候选构造函数(隐式移动构造函数)不可行:没有来自&#39; iterator&#39; (又名&gt;&#39; __ wrap_iter&lt; pointer&gt;&#39;)到&#39; std :: __ 1 :: __ wrap_iter&lt;的std :: __ 1 ::矢量&lt; A,&gt;的std :: __ 1 ::分配器&LT; A&GT; &GT; * GT; &安培;&安培;&#39;对于第一个参数class__wrap_iter
忽略了候选模板:由&#39; enable_if&#39;
禁用
出现此错误的原因是什么?虽然我尝试了几个像运算符重载的东西,但我无法解决这个问题。任何帮助表示赞赏。
答案 0 :(得分:7)
你没有LA
的向量;你有一个A
的向量。所以:
std::vector<A>::iterator it = b[x].begin();
或:
LA::iterator it = b[x].begin();
看起来像是一个简单的错字?
(鉴于这些可怕的类型名称,这并不奇怪......)
答案 1 :(得分:2)
<>
中std::vector<>
内的部分是矢量将要保留的对象的类型,例如std::vector<int>
或std::vector<double>
。在您的情况下,向量中对象的类型是A
。所以你应该写
std::vector<A>::iterator it = b[x].begin();
或使用typedef
,
LA::iterator is = b[x].begin();