2012-01-13 5 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 *'
および
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ですか? –

答えて

3

vector<T>::iteratorは単独でタイプであり、構造体へのポインタと互換性がありません。 vector<PVec3D>::iterator my_iter = avtxlst.begin()を作成する必要があります。

これで、ポインタの場合と同じように、イテレータに対して同じ操作を実行できるようになりました。インクリメント、my_iter++または逆参照*my_iterなど。

my_iterを使用して、Iiとそれ以外の処理を行うことができます。