В течение последних двух или трех часов я боролся с этой проблемой без везения. Я читаю в тексте, а затем пытаюсь сделать список смежности со всеми вершинами, имеющими ссылку на смежные вершины в списке. Класс вершина выглядеть следующим образом:Невозможно сделать вектор указателей
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);
}
является ли это где ошибка?
Вы никогда не инициализировали Vertex v1 или v2. –
Научитесь использовать свой отладчик и, пожалуйста, разместите соответствующий код. –
Код, который вы опубликовали, не является полным (ни минимальным, ни самосогласованным), и мы не знаем, что такое строка 240, поэтому невозможно сказать, является ли проблема, что «вершины» на самом деле не являются 'vector', или что-то еще полностью. Когда вы задаете вопрос, подготовьте [минимальный полный пример] (http://sscce.org), а когда вы пишете код, медленно наращивайте его от простого к сложному, тестируя на каждом шагу. –
Beta