2012-01-13 166 views
0

我在我的頭文件中的下列減速VC++矢量迭代器初始化

// 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 *'
and
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出現了錯誤。
這是爲什麼?
欣賞任何答案

+0

爲什麼* PVec3D不是PVec3D,那就是沒有明星? – 2012-01-13 10:16:22

回答

3

A vector<T>::iterator是一種單獨的類型,與指向結構的指針不兼容。您應該創建一個vector<PVec3D>::iterator my_iter = avtxlst.begin()

現在,您可以對迭代器執行相同的操作,就像使用指針一樣。如增量,my_iter++或解除引用*my_iter

然後,您可以使用my_iter並將其增加Ii以及任何您需要執行的操作。