2016-05-14 3 views
-1

Ich versuche einfach, einen gerichteten gewichteten Graphen mit Vektoren, Listen und Klassen in C++ zu implementieren, aber ich bekomme diesen Fehler. Die Linie wird mir diesen Fehler gibt, ist Zeile 42:21 wo graph[u].push_back(edge(v, w));Fehler: keine realisierbare Konvertierung von "Edge" zu "Const value_type"?

#include <iostream> 
#include <vector> 
#include <list> 
#include <stack> 

using namespace std; 

class edge 
{ 
    private: 
     int cost; 
     int vertex; 
    public: 
     edge(int vertex, int cost) 
     { 
      this->vertex = vertex; 
      this->cost = cost; 
     } 
     int getVertex() const 
     { 
      return vertex; 
     } 
     int getCost() const 
     { 
      return cost; 
     } 
}; 

class Graph 
{ 
    private: 
     int V; 
     std::vector<std::list<edge> > *graph; 
    public: 
     Graph(int V); 
     void addEdge(int u, int v, int w); 
     void DFS(); 
}; 
Graph::Graph(int V) 
{ 
    this->V = V; 
    graph = new std::vector<std::list<edge> >(V); 
} 

void Graph::addEdge(int u, int v, int w) 
{ 
    graph[u].push_back(edge(v, w)); 
} 
int main() 
{ 
    return 0; 
} 

Dank für Ihre Hilfe danken!

Antwort

0

ist ein Zeiger auf einen Vektor, kein Vektor, so dass Sie wollen:

(*graph)[u].push_back(edge(v, w)); 

Aber es scheint nicht ein Zeiger auf sein zu müssen. Wäre es nicht einfacher als ein einfacher Vektor? Es würde auch dein Speicherleck beheben.

+0

Wenn ich es aus einem Zeiger zu entfernen, gibt es mir diesen Fehler: Fehler: keine lebensfähige überladene '=' Grafik = neue Std :: Vektor > (V); –

+0

Löschen Sie das 'neue'. Oder, besser, verwenden Sie Member Initialiser in Ihrem Konstruktor. –

+0

Es funktionierte Herr, danke für Ihre Geduld mit mir! –

Verwandte Themen