无法制作指针向量

时间:2013-09-02 01:07:32

标签: c++ visual-studio-2010 pointers vector iterator

在过去的两三个小时里,我一直在努力解决这个问题。我正在阅读文本,然后尝试创建一个邻接列表,其中所有顶点都有一个链接到列表中相邻顶点的链接。顶点类看起来像这样:

class Vertex {
private:
  std::vector<Vertex*> connPtrVertices;  // vector of vertices adjacent to this one
public:
  void addVertex(Vertex* vert) { connPtrVertices.push_back(vert); }

在main.cpp中,我试图将顶点彼此连接起来:

Vertex *v1, *v2;
v2->addVertex(v1);    // connect v2 to v1 
v1->addVertex(v2);    // connect v1 to v2 

我收到一条Debug Assertion Failed消息:

Debug Assertion Failed!

Program: C:\Windows\system32\MSVCP110D.dll
File: c:\program files (x86)\microsoft visual studio 11.0\vc\include\vector
Line: 240

Expression: vector iterators incompatible

我不知道该怎么做,我们将非常感谢任何帮助。

编辑: 第一次通过循环我分配v1和v2与新,但第二次我检查它们是否存在,如果他们这样做,我指定一个指向Vertex的指针,如下所示:

v1 = &(p_graph->getVertex(vert1));

调用的方法是:

Vertex Graph::getVertex(std::string v) {         // gets the vertex 
  for (std::vector<Vertex>::iterator it = vertices.begin(); it != vertices.end(); it++) {
     if ((it->getName()).compare(v) == 0)
        return *it;  // if strings are the same return vertex
    }
    exit(1);
 }

这是错误的地方吗?

1 个答案:

答案 0 :(得分:0)

  • 它似乎只是在尝试编译此代码。现在,如果您构建项目,它是否在没有编译器错误的情况下构建?调试怎么样?您可以尝试“无需调试即可启动”。这将执行您的代码而无需调试。
  • 您收到的错误消息说:“vector iterators incompatible”
  • 此错误来自您编写迭代器的位置,它似乎位于Graph :: getVertex(std :: string v)函数中。要确认它是否为此函数,您可以注释掉整个Graph :: getVertex(std :: string v)函数定义,并查看错误是否消失。
  • 要修复迭代器错误“不兼容类型”,您可以使用typedef声明迭代器,如下所示:
  • typedef std :: vector“&lt;”Vertex“&gt;” VertexType;
  • VertexType顶点;

  • Vertex Graph :: getVertex(std :: string v){

  • VertexType :: iterator it;
  • for(it = vertices.begin(); it!= vertices.end(); ++ it){
  • 返回*它;
  • }
  • 出口(1);
  • }

  • 确保您的迭代器指向Vertex对象类型。