2016-05-14 6 views
-1

私は単純にベクトル、リスト、クラスを使ってC++で方向付けされた重み付けグラフを実装しようとしていますが、このエラーが発生しています。それは私にこのエラーを与えているラインは、ラインエラー: 'edge'から '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; 
} 

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

はあなたの助けをありがとう42:21です!

答えて

0

は、ベクターへのポインタではなく、ベクトルであるので、あなたがしたい:

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

しかし、ポインタである必要はしていないようです。単純なベクトルのように単純ではないでしょうか?あなたのメモリリークも修正されます。

+0

ポインタから削除すると、このエラーが表示されます。エラー:実行可能なオーバーロードされません '='グラフ=新しいstd :: vector >(V); –

+0

'new'を削除します。または、コンストラクタ内のメンバ初期化子を使用することをお勧めします。 –

+0

私はあなたの忍耐力に感謝してくれました! –