结构编译器错误 vector 的 C++ 迭代器

标签 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();

编译器报错:

error: no viable conversion from '__wrap_iter< A *>' to '__wrap_iter< std::__1::vector < A, std::__1::allocator< A> > *>' std::vector< LA>::iterator it = b[x].begin();

candidate constructor (the implicit copy constructor) not viable: no known conversion from 'iterator' (aka '__wrap_iter< pointer>') to 'const std::__1::__wrap_iter< std::__1::vector< A, > std::__1::allocator< A> > *> &' for 1st argument class__wrap_iter

candidate constructor (the implicit move constructor) not viable: no known conversion from 'iterator' (aka > '__wrap_iter< pointer>') to 'std::__1::__wrap_iter< std::__1::vector< A, > std::__1::allocator< A> > *> &&' for 1st argument class__wrap_iter

candidate template ignored: disabled by 'enable_if'

这个错误的原因是什么?虽然我尝试了几种操作符重载之类的方法,但我无法解决这个问题。感谢您的帮助。

最佳答案

你没有LA的 vector ;你有一个 A 的 vector 。所以:

std::vector<A>::iterator it = b[x].begin();

或:

LA::iterator it = b[x].begin();

我觉得这只是一个简单的错字?

(鉴于这些可怕的类型名称,这并不奇怪......)

关于结构编译器错误 vector 的 C++ 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32210305/

相关文章:

c++ - 结构尺寸太大,需要优化

c++ - '.colorBet' 的左边必须有类/结构/union

c++ - 并行化动态数组

c++ - 尝试使用QT的网络库时报错2027

c++ - 插入排序优化

c++ - 编译器不接受三元运算符的使用

c# - 是否可以定义在系统范围内使用的自定义 URI 方案?

c++ - 从现有的柯南项目中导出所有依赖项的源代码

java - 迭代器或枚举,我应该使用什么?

C++ 处理 'struct' 和字符串