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