2013-09-02 3 views
0

В течение последних двух или трех часов я боролся с этой проблемой без везения. Я читаю в тексте, а затем пытаюсь сделать список смежности со всеми вершинами, имеющими ссылку на смежные вершины в списке. Класс вершина выглядеть следующим образом:Невозможно сделать вектор указателей

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 

У меня нет понятия, что делать, любая помощь будет принята с благодарностью.

Edit: В первый раз через петлю, я задаю 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); 
} 

является ли это где ошибка?

+5

Вы никогда не инициализировали Vertex v1 или v2. –

+1

Научитесь использовать свой отладчик и, пожалуйста, разместите соответствующий код. –

+1

Код, который вы опубликовали, не является полным (ни минимальным, ни самосогласованным), и мы не знаем, что такое строка 240, поэтому невозможно сказать, является ли проблема, что «вершины» на самом деле не являются 'vector ', или что-то еще полностью. Когда вы задаете вопрос, подготовьте [минимальный полный пример] (http://sscce.org), а когда вы пишете код, медленно наращивайте его от простого к сложному, тестируя на каждом шагу. – Beta

ответ

0
  • Кажется, что вы просто пытаетесь скомпилировать этот код. Теперь, если вы строите проект, он строит без ошибки компилятора? Как насчет отладки? вы можете попробовать «Начать без отладки». Это приведет к выполнению кода без отладки.
  • Сообщение об ошибке, которое вы получаете: «Итераторы векторных несовместимых»
  • Эта ошибка исходит из того, где вы написали итератор, и похоже, что она находится в функции Graph :: getVertex (std :: string v). Чтобы подтвердить эту функцию, вы можете прокомментировать все определение функции Graph :: getVertex (std :: string v) и посмотреть, исчезла ли ошибка.
  • Чтобы исправить ошибку итератора «несовместимый тип» вы можете объявить итератор с ЬурейиМи так:
  • ЬурейеГо станд :: вектор «<„Vertex“>» VertexType;
  • VertexType vertices;

  • вершинный граф :: getVertex (станд :: строка v) {

  • VertexType :: итератора его;
  • для (it = vertices.begin(); it! = Vertices.end(); ++ it) {
  • return * it;
  • }
  • выход (1);
  • }

  • Убедитесь, что итератор указывает на Vertex типа объекта.

Смежные вопросы