VC ++矢量迭代器初始化

时间:2012-01-13 10:12:37

标签: visual-studio-2008 visual-c++ vector

我的头文件中有以下减速

// 3D Vector
typedef struct tagV3D /*: V2D*/ {
  union {
   struct {
          double x;
          double y;
          double z;
   };
   struct {
          struct tagV2D v2d_;
   };
 };
} V3D, TVec3D, *PVec3D;

现在我的cpp文件中有一个方法

    bool InsertSelfIntersectionVertexes(vector<PVec3D> &avtxlst) {

    PVec3D vtx;
    int iI;
    ...

    vtx = new TVec3D;
    *vtx = v;
    PVec3D* p= avtxlst.begin() + iI + 1;
    avtxlst.insert(p, vtx);

    ...
    }  

我在尝试编译代码时遇到以下错误

error C2440: 'initializing' : cannot convert from 'std::_Vector_iterator<_Ty,_Alloc>' to 'PVec3D *'

error C2664: 'std::_Vector_iterator<_Ty,_Alloc> std::vector<_Ty>::insert(std::_Vector_const_iterator<_Ty,_Alloc>,const _Ty &)' : cannot convert parameter 1 from 'PVec3D' to 'std::_Vector_const_iterator<_Ty,_Alloc>'

如何解决此问题?

以下代码适用于 vc6 ,迁移到 VS 2008 时出现错误。
那是为什么?
感谢任何答案

1 个答案:

答案 0 :(得分:3)

vector<T>::iterator本身就是一个类型,与你的结构指针不兼容。您应该创建一个vector<PVec3D>::iterator my_iter = avtxlst.begin()

现在,您可以对迭代器执行相同的操作,就像使用指针一样。例如增量,my_iter++或取消引用*my_iter

然后,您可以使用my_iter并将其增加Ii以及您需要做的任何事情。