Инициализация VC ++ векторного итератора - PullRequest
0 голосов
/ 13 января 2012

У меня есть следующее замедление в моем заголовочном файле

// 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 Ответ

3 голосов
/ 13 января 2012

A vector<T>::iterator сам по себе является типом и не совместим с указателем на вашу структуру. Вы должны создать vector<PVec3D>::iterator my_iter = avtxlst.begin().

Теперь вы можете выполнять с итератором те же операции, что и с указателем, который у вас был. Например, приращение, my_iter++ или разыменование *my_iter.

Затем вы можете использовать my_iter и увеличить его на Ii и все, что вам нужно сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...