【问题标题】:VC++ vector iterator initializationC++ 向量迭代器初始化
【发布时间】:2012-02-09 13:21:10
【问题描述】:

我的头文件中有以下减速

// 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&lt;_Ty,_Alloc&gt;' to 'PVec3D *'

error C2664: 'std::_Vector_iterator&lt;_Ty,_Alloc&gt; std::vector&lt;_Ty&gt;::insert(std::_Vector_const_iterator&lt;_Ty,_Alloc&gt;,const _Ty &amp;)' : cannot convert parameter 1 from 'PVec3D' to 'std::_Vector_const_iterator&lt;_Ty,_Alloc&gt;'

我该如何解决这个问题?

以下代码在 vc6 上运行良好,并且在迁移到 VS 2008 时出现错误。
这是为什么呢?
感谢任何答案

【问题讨论】:

  • 为什么 *PVec3D 不是 PVec3D,即没有星号?

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


【解决方案1】:

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

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

然后您可以使用my_iter 并将其递增Ii 以及您需要执行的任何其他操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-27
    • 1970-01-01
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    相关资源
    最近更新 更多