struct Compiler Error向量的C ++迭代器

时间:2015-08-25 17:22:29

标签: c++ vector struct iterator

我创建了一个包含两个变量的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;

禁用

出现此错误的原因是什么?虽然我尝试了几个像运算符重载的东西,但我无法解决这个问题。任何帮助表示赞赏。

2 个答案:

答案 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();