2016-05-02 10 views
-4

C++のクラスを使って有向グラフを実装しようとしています。グラフを作成してエッジを追加するのに問題があります。C++:グラフを実装します。

class Graph { 
public: 
    typedef unsigned node; 

    Graph(size_t n) 
    { 
     vector<list<int>> graph(n, list<int>()); 
    } 

    void make_edge(node node1, node node2) 
    { 
     size_t n; 
     Graph graph(n); // error here 
     graph[node1].push_back(node2); 
    } 
... 
... 
... 
} 

EDIT: 私はパラメータとその型を変更ここに私のコードからの抜粋です。今、私は同じ場所に「宣言されていない識別子のグラフを使用する」というエラーが表示されます。

+2

まあ、 'int'そして実際に'のstd ::リスト 'を取るコンストラクタがありません。 – Quentin

+2

* 1つの引数を持つコンストラクタがありますが、* 2つの引数を使ってそれを呼び出そうとしています。 –

+0

_constructor_は、 'Graph'と呼ばれる関数です。引数を見て、それから渡された引数を "ここでエラー"で見てください。 – nobar

答えて

0

コンストラクタには、「グラフ」というローカルのvectorがあります。次にmake_edgeは、新しいサイズGraph(不定サイズ)を作成し、それを「グラフ」と呼び、このGraphのインデックスを作成しようとします。

コンストラクタ内のローカル変数がメンバ変数であることを意図していると思われ、make_edgeでこれを使用します。このよう

class Graph { 
public: 
    typedef unsigned node; 
    vector<list<int>> graph; 

    Graph(size_t n) 
     : graph(n, list<int>()) 
    { 
    } 

    void make_edge(node node1, node node2) 
    { 
     graph[node1].push_back(node2); 
    } 
... 
... 
... 
} 
+0

注:リスト '' () 'は一時的ではなく、' std :: vector'はその内容をデフォルトで構築します。 – Quentin

+0

ああ、ありがとうございました。 – tylerjazz

1

あなたは、パラメータとしてsize_tを取るコンストラクタを持っているが、make_edgeメソッドの中には、パラメータ(int, list<int>())でコンストラクタを使用してGraph変数を作成しようとしています。

これらの2つのパラメータタイプを受け入れるコンストラクタがない場合は、それを指定する必要があります。

関連する問題