我正在尝试在我的代码中使用下一个constuctioon:
for (std::vector<Process>::iterator iter = processesExecutuions->begin(); iter != processesExecutuions->end(); ++iter) {
if (iter.base()->id == id) {
return iter.base();
}
}
但VisualStudio在编译时抛出错误:
错误C2039:'base':不是'std :: _ Vector_iterator&lt; _Myvec&gt;'
当我在Ubuntu中使用make with g ++时,一切正常 你能澄清一下如何在msvs中解决这个问题吗?
答案 0 :(得分:0)
您似乎依赖std::vector::<T>iterator
作为具有成员函数base
的类型。您不能对容器迭代器的实际类型做出这样的假设。迭代器可以通过多种方式实现,只要它满足certain requirements即可。
在std::vector
的情况下,迭代器是随机访问迭代器,甚至可以在某些平台上实现为普通指针。所以不要依赖迭代器的实现细节:这些都不是可移植的。
注意:如果您想访问Process::base
而不是std::vector<T>::iterator::base
,则需要iter->base()
而不是iter.base()
。